我有一个数据框mydata[[i]]
,其中包含数据框
示例:
str(mydata[[1]])
NULL
dim(mydata[[1]])
NULL
str(mydata[[2]])
'data.frame': 154 obs. of 1 variables:
$ mod : num 0.0993 0.1003 0.0855 0.077 0.0954 ...
> dim(mydata[[2]])
[1] 154 1
# until mydata[[125]]
正如您所看到的那样,某些内容中没有任何内容,因此它会返回NULL
(mydata [[1]])但是对于mydata[[2]]
我需要的是说if sd(mydata[[i]]$mod)> 5 return mydata[[i]] as NULL
答案 0 :(得分:1)
我们使用list
循环lapply
并使用if/else
条件。
ind <- sapply(mydata, is.null)
ind1 <- sapply(mydata[!ind], function(x) all(is.na(x$obs)))
mydata[!ind][!ind1] <- lapply(mydata[!ind][!ind1],
function(x) if((sd(x$mod)/sd(x$obs, na.rm=TRUE))>5) NULL else x)
mydata <- list(NULL, data.frame(obs=c(NA, 1:3,5), mod=c(24, 25, 39, 85, 20)),
NULL, data.frame(obs=1:5, mod=c(24:28)), data.frame(obs=NA, mod=c(2,24)))