我有一个数据框("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"
我遇到了以下错误:
"Error in
$<-.data.frame
(*tmp*
, "valueBin", value = c(NA, NA, NA, : replacement has 6530 rows, data has 6532"
df$value
的每个元素应该符合我的 which()
语句之一。 df$value
中没有缺失值。即使我只运行第一个条件语句(<=250),我也会得到完全相同的错误,带有 "...replacement has 6530 rows..."
,尽管小于等于250的记录要少得多,并且 value 永远不是 NA。
这个SO链接提到使用aggregate()时出现类似错误是一个bug,但它建议安装我已经拥有的R版本。此外,错误报告说它已经修复了。 R aggregate error: "replacement has <foo> rows, data has <bar>"
这个SO链接与我的问题更相关,这里的问题是他/她的条件逻辑导致替换数组的元素较少。我想这也一定是我的问题,起初认为可能是 "<=" 与 "<" 弄反,但检查后我相当确定它们都是正确的,可以覆盖 "value" 的每个值而没有重叠。 R error in '[<-.data.frame'... replacement has # items, need #
cut
函数。但如果你想使用自己的方法,首先要初始化新列,然后给出命令:df$valueBin<-""
,然后再进行其他的赋值操作。 - nicola