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

时间:2015-04-23 05:59:30

标签: r dataframe

我在数据框(“df”)中有一个数字列(“值”),我想根据“值”生成一个新列(“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中没有缺失值。虽然即使我只运行第一个条件语句(&lt; = 250),但我得到了完全相同的错误,"...replacement has 6530 rows..."虽然有少于6530条记录值<&lt; = 250,但值绝不是NA。

当使用aggregate()是一个bug时,这个SO链接注意到类似的错误,但它建议安装我拥有的R版本。此外,错误报告称其已修复。 R aggregate error: "replacement has <foo> rows, data has <bar>"

这个SO链接似乎与我的问题更相关,这里的问题是他/她的条件逻辑的问题导致更换数组的元素生成更少。我想这也一定是我的问题,并且首先想到我必须有一个“&lt; =”而不是“&lt;”反之亦然,但经过检查后我很确定它们都是正确的,可以覆盖“价值”的每一个值,而不会重叠。 R error in '[<-.data.frame'... replacement has # items, need #

3 个答案:

答案 0 :(得分:38)

@akrun的答案肯定能解决问题。对于想要理解原因的未来googlers,这里有一个解释......

首先需要创建新变量。

变量“valueBin”需要已经在df中才能使条件赋值工作。本质上,代码的语法是正确的。只需在代码卡盘前添加一行即可创建此名称 -

df$newVariableName <- NA

然后继续使用您拥有的任何条件分配规则,例如

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

我责怪谁写了那个包的错误信息......调试因错误信息而特别令人困惑。在df中有两个不同长度的数组是无关紧要的信息。不。只需先创建新列。有关详细信息,请参阅此帖https://www.r-bloggers.com/translating-weird-r-errors/

答案 1 :(得分:15)

您可以使用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))

答案 2 :(得分:0)

TL; DR ...,而且晚点参加,但是简短的解释可能会对将来的Google员工有所帮助。

通常,错误消息表示替换不适合数据框的相应列。

一个最小的例子:

df <- data.frame(a = 1:2); df$a <- 1:3

引发错误

$<-.data.frame*tmp*中的错误,a,值= 1:3):替换 有3行,数据有2

这很清楚,因为a的向量df有2个条目(行),而我们尝试替换的向量有3个条目(行)。