2015-09-03 2 views
1

У меня есть много dataframes где отсутствующие значения обозначаются строками символов 'NA', которые не понимали, как не хватает Р.Применить функцию к несколько dataframes

Длительного решения было бы применить следующую функцию к каждому dataframe:

mydf[mydf == 'NA'] <- NA 

Я хочу, чтобы применить вышеуказанную функцию для многих dataframes.

Рассмотрим следующий пример:

set.seed(123) 
A=as.data.frame(matrix(sample(c('NA',1:10),10*10,T),10))) 
B=as.data.frame(matrix(sample(c('NA',LETTERS[1:10]),10*10,T),10)) 
C=as.data.frame(matrix(sample(c('NA',letters[1:10]),10*10,T),10)) 

и мой лучший попробовать (который не работает):

target <- list(A, B, C) 
lapply(target, function(x) x[x == 'NA'] <- NA) 
+2

lapply (целевая функция (х) х [х == «NA»] <- NA: return (x)) – vck

+1

И присвойте результаты переменной, например 'target_NA <- lapply (.....' – Heroka

+0

Возможно, я нашел решение, но не очень элегантное. Есть ли возможности для улучшения? 'Mylist = Map (function (x) ifelse (x == 'NA', NA, x), target) ' и' for (i in 1: length (mylist)) {assign (paste (i), do.call (rbind , lapply (mylist [i], unlist)))} ' – goclem

ответ

2

Вы почти получили это право. Вы просто забыли, что R возвращает последний доступный элемент функции. В вашем случае, это только часть каждого кадра данных, поэтому установить функцию для возврата x и она работает:

set.seed(123) 
A = as.data.frame(matrix(sample(c('NA',1:10),10*10,T),10)) 
B = as.data.frame(matrix(sample(c('NA',LETTERS[1:10]),10*10,T),10)) 
C = as.data.frame(matrix(sample(c('NA',letters[1:10]),10*10,T),10)) 

target = list(A, B, C) 
lapply(target, function(x) { 
    x[x == 'NA'] <- NA 
    return(x) 
}) 
Смежные вопросы