为了账号安全,请及时绑定邮箱和手机立即绑定

错误-替换有[x]行,数据有[y]

/ 猿问

错误-替换有[x]行,数据有[y]

天涯尽头无女友 2019-11-19 08:52:22

我在数据框(“ df”)中有一个数字列(“ value”),我想基于“ value”生成一个新列(“ valueBin”)。我有以下条件代码来定义df $ valueBin:


df$valueBin[which(df$value<=250)] <- "<=250"

df$valueBin[which(df$value>250 & df$value<=500)] <- "250-500"

df$valueBin[which(df$value>500 & df$value<=1000)] <- "500-1,000"

df$valueBin[which(df$value>1000 & df$value<=2000)] <- "1,000 - 2,000"

df$valueBin[which(df$value>2000)] <- ">2,000"

我收到以下错误:


“ $<-.data.frame((*tmp*,“ valueBin”,值= c(NA,NA,NA,的错误:替换有6530行,数据有6532”)


的每个元素df$value都应适合我的which()陈述之一。中没有缺失值df$value。尽管即使我只运行第一个条件语句(<= 250),我也得到了完全相同的错误,"...replacement has 6530 rows..."尽管值小于等于250的记录少于6530个,并且值从不为NA。


当使用aggregate()时,此SO链接记录了类似的错误,但它建议安装RI have的版本。加上错误报告说它已修复。 R聚合错误:“替换具有<foo>行,数据具有<bar>”


该SO链接似乎与我的问题更相关,这里的问题是他/她的条件逻辑问题,导致生成替换数组的元素较少。我想这也同样是我的问题,首先我想必须有一个“ <=”而不是“ <”,反之亦然,但是在检查之后,我很确定它们都正确地覆盖了每个值没有重叠的“价值”。 '[<-。data.frame'...中的R错误...替换有#个项目,需要#


查看完整描述

2 回答

?
凤凰求蛊

你可以用 cut


 df$valueBin <- cut(df$value, c(-Inf, 250, 500, 1000, 2000, Inf), 

    labels=c('<=250', '250-500', '500-1,000', '1,000-2,000', '>2,000'))

数据

 set.seed(24)

 df <- data.frame(value= sample(0:2500, 100, replace=TRUE))


查看完整回答
反对 回复 2019-11-19
?
临摹微笑

对于想了解原因的未来Google员工,这里有一个解释...


首先需要创建新变量。


变量“ valueBin”必须已经在df中,以便条件分配起作用。本质上,代码的语法是正确的。只需在代码卡盘前面添加一行即可创建此名称-


df$newVariableName <- NA

然后,您继续执行任何条件分配规则,例如


df$newVariableName[which(df$oldVariableName<=250)] <- "<=250"

我责怪编写该软件包错误消息的人...该错误消息使调试特别混乱。不相关的信息是您在df中有两个长度不同的数组。否。只需先创建新列即可。有关更多详细信息,请参阅此帖子https://www.r-bloggers.com/translate-weird-r-errors/


查看完整回答
反对 回复 2019-11-19
  • 2 回答
  • 0 关注
  • 37 浏览
我要回答

相关问题推荐

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信