Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用数据帧上的循环将R中的NA替换为0_R - Fatal编程技术网

使用数据帧上的循环将R中的NA替换为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 知道是什么导致了错误

我想运行数据帧中的特定列,并使用循环将所有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
知道是什么导致了错误吗?

怎么样

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