Стирание определенных строк нескольких фреймов данных в списке - PullRequest
2 голосов
/ 10 августа 2011

Предположим, у меня есть такой список, включающий 3 кадра данных с именами 1, 3 и 4:

        1                   3           4  
1   A   c(2, 1, 3, 1, 2)    c(1, 1, 2)  c(1, 1)
2   B   c(1, 1, 1, 3, 2)    c(2, 1, 2)  c(2, 1)

Кадры данных имеют все те же столбцы (A и B), но различное количество строк, как вы видите.Как стереть строки со значениями <2 в столбце B для всех фреймов данных в списке? </p>

Я попытался выполнить все с:

list <- lapply(list, function(x) {x <- any(x[,c(2)] < 2);x})

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

Разумное использование lapply() и простое подмножество так же хорошо, как и любой подход.Использование ваших данных в l:

l <- list("1" = data.frame(A = c(2, 1, 3, 1, 2), B = c(1, 1, 1, 3, 2)),
          "3" = data.frame(A = c(1,1,2), B = c(2,1,2)),
          "4" = data.frame(A = c(1,1), B = c(2,1)))

Это делает то, что вы хотите

lapply(l, function(x) x[x$B >= 2,])

, давая:

> lapply(l, function(x) x[x$B >= 2,])
$`1`
  A B
4 1 3
5 2 2

$`3`
  A B
1 1 2
3 2 2

$`4`
  A B
1 1 2
1 голос
/ 10 августа 2011

Как насчет этого:

lst <- lapply(lst, function(x) {subset(x, B >= 2)})
...