提取并应用,使用“应用”将NAs设置为0或恢复为未满足的NA条件。

时间:2016-07-27 15:13:08

标签: r lapply sapply

我正在玩我的测试数据集,试图反映我遇到的数据时遇到的现实问题或任务。

目前,我正在尝试将多个变量(列)中的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。

如果有人能指出我正确的方向或想到更好的方式,我会很感激。

再次感谢所有人!

0 个答案:

没有答案