【发布时间】:2015-07-01 03:14:19
【问题描述】:
我在数据框 ("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", value = c(NA, NA, NA, : 替换有6530行,数据有6532"
df$value 的每个元素都应该适合我的which() 语句之一。 df$value 中没有缺失值。尽管即使我只运行第一个条件语句 ("...replacement has 6530 rows..." 尽管 value
此 SO 链接在使用 aggregate() 时指出类似错误是一个错误,但它建议安装我拥有的 R 版本。加上错误报告说它已修复。 R aggregate error: "replacement has <foo> rows, data has <bar>"
这个 SO 链接似乎与我的问题更相关,这里的问题是他/她的条件逻辑问题,导致生成的替换数组的元素更少。我想这也一定是我的问题,起初我认为我必须有一个“R error in '[<-.data.frame'... replacement has # items, need #
【问题讨论】:
-
您需要遵循@akrun 所说的并使用
cut。但是,如果您想使用您的方法,请先初始化新列而不是给出您的命令:df$valueBin<-"",然后是其他分配。