我正在玩我的测试数据集,试图反映我遇到的数据时遇到的现实问题或任务。
目前,我正在尝试将多个变量(列)中的NAs设置为0,这些变量是从较大的数据集中提取的,然后我将求和,如果结果为零,则将列恢复为NA 。下面是我的思路/方式,我试图自己做这个,但如果你们中的任何一个人能想到一个首选或更容易阅读的方式,我很乐意看到它!
到目前为止,这是我提出的问题。
#Play Data
v1 <- c("Blue","Red","Blue","Red","Purple")
v2 <- c(1,NA,3,4,NA)
v3 <- c(NA,NA,3,4,5)
v4 <- c(1,NA,1,2,2)
v5 <- c(1,NA,3,NA,5)
x = data.frame (v1,v2,v3,v4,v5)
我正在提取此操作所需的列,并使用sapply来确定NA。
Extract<- sapply(x[,c("v2","v3","v4","v5")], is.na)
其次是自定义功能(我已从其他先前的操作中回收)。这就是我的错误发生的地方......
x[Extract] <- lapply(x[Extract], function(k) replace(k, is.na(k), 0))
# I get the below error
Error in `[<-.data.frame`(`*tmp*`, Extract, value = list("Red", "Purple", :
unsupported matrix index in replacement
我已经给出了不同类型的应用功能,但无济于事。但是,我几乎是积极的,这就是我的问题所在。如果我要继续我的脚本并完成上述任务,我接下来的两行代码就是......
x$vcheck <- rowSums(x[, c("v2","v3","v4","v5")], na.rm=TRUE)
x[x$vcheck == 0, c("v2","v3","v4","v5")] <- NA # For rows without any values
希望这个脚本一起使用存在数字/答案的行,并将0代替该行中的任何NA。但是,如果行中没有数字/答案,那么它会将行转换回所有NA。
如果有人能指出我正确的方向或想到更好的方式,我会很感激。
再次感谢所有人!