2013-07-30 2 views
4

Я понимаю, что этот вопрос очень похож на this one (среди прочих), однако я не могу изменить решение (-ы), чтобы соответствовать моей проблеме. Пожалуйста, отметьте как дубликат или ссылку на существующий ответ, если это необходимо. Вот некоторые примеры данных слегка модифицированные из вышеупомянутого вопроса:Подмножество списка data.frames и возвращаемого списка data.frames

a=c(1,2,3,4,5,6) 
b=c(4,5,6,5,5,5) 
c=c(3,4,5,6,7,8) 
A=data.frame(a=a,b=b,c=c) 
B=data.frame(a=c,b=b,c=a) 
C=data.frame(a=b,b=c,c=a) 
l <- list(A, B, C) 

Я хотел бы создать список dataframes, который является подмножеством первоначальных dataframes (в l), которые соответствуют условию. Например, мне бы хотелось вернуть все значения, больше или равные 4, с более низкими значениями, замененными на NA, так что мой новый список, subsetl выглядит следующим образом. (Я не забочусь о сохранении НС находится в правильном месте в dataframe.)

> subsetl 
[[1]] 
a b c 
1 NA 4 NA 
2 NA 5 4 
3 NA 6 5 
4 4 5 6 
5 5 5 7 
6 6 5 8 

[[2]] 
a b c 
1 NA 4 NA 
2 4 5 NA 
3 5 6 NA 
4 6 5 4 
5 7 5 5 
6 8 5 6 

[[3]] 
a b c 
1 4 NA NA 
2 5 4 NA 
6 5 NA 
4 5 6 4 
5 5 7 5 
6 5 8 6 

Я надеюсь, что мой пример достаточно ясно понять, но позвольте мне, если не знаете. Это, без сомнения, прост, используя lapply, sapply или тому подобное, но я не могу получить синтаксис правильно при использовании списков и особенно когда список данных-кадров является желаемым результатом.

ответ

4

Это должно сделать это для вас:

subsetl <- lapply(l,function(x) { 
    x[x<4] <- NA 
    return(x) 
}) 

Результат:

>subsetl 
[[1]] 
    a b c 
1 NA 4 NA 
2 NA 5 4 
3 NA 6 5 
4 4 5 6 
5 5 5 7 
6 6 5 8 

[[2]] 
    a b c 
1 NA 4 NA 
2 4 5 NA 
3 5 6 NA 
4 6 5 4 
5 7 5 5 
6 8 5 6 

[[3]] 
    a b c 
1 4 NA NA 
2 5 4 NA 
3 6 5 NA 
4 5 6 4 
5 5 7 5 
6 5 8 6 
+0

Привет Томас, который отлично подходит и именно то, что я получал в несмотря на плохое объяснение. Благодарю. – user1912925

+1

Другое: 'mapply (replace, l, lapply (l, '<', 4), NA, SIMPLIFY = FALSE)' – flodel

Смежные вопросы