【发布时间】:2020-08-18 22:13:12
【问题描述】:
我希望有人可以帮助我:)
我有一个包含大约 1000 列的数据框。 在其中,我有这样命名的列: X1,X2,X3,X4,X5,X6 等... Y1,Y2,Y3,Y4,Y5,Y6 等...
df <- data.frame("X1" = c("Yes","No","Yes","NA","NA","NA","Yes","No","Yes","NA","NA","NA","NA"),
"X2" = c("Yes","NA","NA","NA","NA","Yes","NA","NA","NA","NA","Yes","NA","NA"),
"X3" = c("Yes","NA","NA","NA","Yes","No","Yes","NA","Yes","NA","NA","NA", "Yes"),
"X4" = c("Yes","No","Yes","NA","NA","NA","Yes","No","Yes","NA","NA","NA","NA"),
"X5" = c("Yes","NA","NA","NA","NA","Yes","NA","NA","NA","NA","Yes","NA","NA"),
"X6" = c("Yes","NA","NA","NA","Yes","No","Yes","NA","Yes","NA","NA","NA", "Yes"),
"Y1" = c("Yes","No","Yes","NA","NA","NA","Yes","No","Yes","NA","NA","NA","NA"),
"Y2" = c("Yes","NA","NA","NA","NA","Yes","NA","NA","NA","NA","Yes","NA","NA"),
"Y3" = c("Yes","NA","NA","NA","Yes","No","Yes","NA","Yes","NA","NA","NA", "Yes"),
"Y4" = c("Yes","No","Yes","NA","NA","NA","Yes","No","Yes","NA","NA","NA","NA"),
"Y5" = c("Yes","NA","NA","NA","NA","Yes","NA","NA","NA","NA","Yes","NA","NA"),
"Y6" = c("Yes","NA","NA","NA","Yes","No","Yes","NA","Yes","NA","NA","NA", "Yes"))
在某些列中,我将“是”替换为 1,将“否”替换为 0,并将其他任何内容替换为 NA。
我试过这个:
names = c("X","Y")
for (name in names){
try(
for (j in 1:6){
j <- toString(j)
colname <- paste(name , j, sep="")
df$colname <- gsub("Yes", as.integer(1), df$colname)
df$colname <- gsub("No", as.integer(0), df$colname)
})}
但是,这不起作用,抛出错误消息:
Error in `$<-.data.frame`(`*tmp*`, "colname", value = character(0)) : replacement has 0 rows, data has 13
-
我的第一个问题是:为什么列名没有正确引用?
-
第二个问题是:如何将这些列中不是 0 或 1 的内容替换为“NA”?
这可能是我忽略的一件非常简单的事情,但我不知道该怎么做。 任何帮助将不胜感激。
提前非常感谢, 丰富
【问题讨论】:
-
为了将来参考,
df$colname是错误的。在这里你需要使用df[, colname],并且在创建df时你也不需要在变量名周围加上引号