使用数据帧上的循环将R中的NA替换为0
我想运行数据帧中的特定列,并使用循环将所有NAs替换为0使用数据帧上的循环将R中的NA替换为0,r,R,我想运行数据帧中的特定列,并使用循环将所有NAs替换为0 extract = read.csv("2013-09 Data extract.csv") extract$Premium1[is.na(extract$Premium1)] <- 0 extract$Premium1 给 Error in get(paste("extract$Premium", i, sep = "")) : object 'extract$Premium1' not found 知道是什么导致了错误
extract = read.csv("2013-09 Data extract.csv")
extract$Premium1[is.na(extract$Premium1)] <- 0
extract$Premium1
给
Error in get(paste("extract$Premium", i, sep = "")) :
object 'extract$Premium1' not found
知道是什么导致了错误吗?怎么样
for (colname in names(extract))
extract[[colname]][is.na(extract[[colname]])] <- 0
for(名称中的colname(摘录))
extract[[colname]][is.na(extract[[colname]]]]]由于其他要求,是否需要循环?因为它没有一个就可以正常工作:
extract[is.na(extract)] <- 0
extract[is.na(extract)]get()不会解析字符串。也许:get(“extract”)[[paste0(“Premium”,i)]]
尽管它看起来很痛苦。为什么需要获取
“提取”。为什么不呢:extract[[paste0(“Premium”,i)]
看看这个答案:谢谢你的观察,DWin。我使用表示(我在1:27中){extract[[paste0(“Premium”,I)]][is.na(extract[[paste0(“Premium”,I)])]@user1886721我不想替换我的数据帧中的所有NAs;不过这是一篇有趣的文章,谢谢。谢谢Konrad。我在internet上的其他地方看到过这个解决方案,但我希望只从选定的列集中删除NAs。谢谢Konrad,我注意到了你的解决方案。有没有办法使列引用相对当底层数据帧的布局发生变化时,脚本是否将编辑正确的列?@adrian是的,当然。事实上,您应该使用变量而不是硬编码的绝对列。只需替换列的(变量)名称而不是我使用的范围。例如,使用类似c的内容('Premium1','Premium3')
而不是1:5
。哇,太棒了!我现在使用的是working@Adriaan在这种情况下,不需要c(…)
甚至。只需使用paste0(“Premium”,1:27)
直接。谢谢sds;是的,我只想篡改特定列。您和德温的解决方案解决了问题,但我发现康拉德的解决方案更优雅:)我收到以下错误:警告消息:在grep(名称(摘录),“^Premium”中:参数“pattern”的长度大于1,将只使用第一个元素
。我不确定此解决方案试图实现什么,但如果选择标题中带有“Premium”的所有列,则我厌倦了实现它,因为还有其他列(例如再保险的ReasPremium1
)我不想碰它。抱歉,修正了arg顺序。这会选择以“Premium”开头然后有数字的列。
for(i in 1:27) {
colname <- paste0("Premium",i)
extract[[colname]][is.na(extract[[colname]])] <- 0
}
premium <- grep("^Premium[0-9]*$",names(extract))
extract[premium][is.na(extract[premium])] <- 0
extract[is.na(extract)] <- 0
first5 <- extract[, 1 : 5]
first5[is.na(first5)] <- 0
extract[, 1 : 5] <- first5