我有一个数据框列表,都包含数字数据。我将如何更改内部data.frames,使NA值= 0和任何>或= 1,等于1.基本上,转换为零和一的data.frames。
一个简单的例子。
x <- list()
x$a <- data.frame(c(NA, NA, 7, 7, NA), c(1,1,NA,NA,NA))
x$b <- data.frame(c(NA, NA, 7, 7, NA), c(1,1,NA,NA,NA))
x$c <- data.frame(c(NA, NA, 7, 7, NA), c(1,1,NA,NA,NA))
一般来说,如果我只做一个,我会做一些事情:
x$a[x$a >= 1] <- 1
x[is.na(x$a)] <- 0
现在,我如何在整个列表中应用它?
更新:任何人都想用ldply()添加一个解决方案吗?
答案 0 :(得分:4)
可能有一个更短/更有效的解决方案,但这有效:
lapply(x, function(y) {y[y >= 1] <- 1; y[is.na(y)] <- 0; y})
答案 1 :(得分:3)
Nest适用于lapply:
lapply(x, function(x)
apply(x, 2, function(y) ifelse(is.na(y), 0, ifelse(y >= 1, 1, y))
)
)
答案 2 :(得分:1)
这是另一种非常令人费解的方式。它的工作原理是首先将所有NA替换为0,然后选择最小的数字和1.这只是为了说明和乐趣,不建议使用,因为它是噩梦般的代码来维护!
lapply(lapply(x, function(y) replace(y, is.na(y), 0)), sapply, pmin, 1)