2017-02-16 2 views
0

У меня есть список data.frames который выглядит следующим образом:Lapply на столбцах списка data.frames

$ 0

  My_Patient_Name Control  My_experiment 
       Patient1   <NA>    <NA>  
       Patient2   <NA>    <NA> 
       Patient3   <NA>    YES 

$ 1

  My_Patient_Name Control  My_experiment 
       Patient4   1,3,5    <NA>  
       Patient5   1,3,5    <NA> 
       Patient6   1,3,5    <NA>   

Я бы как проверить, есть ли в каждом data.frame списка NA в столбце Control. Для одного data.frame в то время это:

condition = sapply(mydf[[1]][2],function(x) {!all(is.na(x))} 
then  

condition = sapply(mydf[[2]][2],function(x) {!all(is.na(x))} 
and so on. 

Но я хотел бы, чтобы запустить его на каждом data.frame списка.

+0

Просьба представить выборочные данные/воспроизводимый пример. Например, используйте dput() на 2-3 ваших фрейма данных или создайте 2-3 кратких примера dfs, которые мы можем скопировать и запустить для устранения неполадок. – jesstme

+0

Примечание. Существует также функция 'any', которая дает TRUE, если любое из значений TRUE и FALSE в противном случае. Таким образом, вам не нужно играть с отрицанием результата от 'all'. – Dason

ответ

0

Используйте lapply, чтобы проверить состояние каждого элемента списка

mydf = list() 
mydf[[1]] <- data.frame(My_Patient_Name=c("Patient1", "Patient2", "Patient3"), Control=c(NA, NA, NA), My_experiment=c(NA,NA,"YES")) 
mydf[[2]] <- data.frame(My_Patient_Name=c("Patient3", "Patient4", "Patient5"), Control=c("1,3,5", "1,3,5", "1,3,5"), My_experiment=c(NA,NA,NA)) 
lapply(mydf, function(df) sapply(df[2],function(x) {any(is.na(x))})) 
#[[1]] 
#Control 
# TRUE 

#[[2]] 
#Control 
# FALSE 
Смежные вопросы