Удалить определенные кадры данных из списка кадров данных в R - PullRequest
0 голосов
/ 26 февраля 2019

Я прочитал и использовал ответы на следующий вопрос ( Удалить конкретный фрейм данных из списка фреймов данных в R ), где один конкретный фрейм данных должен был быть удален из списка.Теперь мне нужно развить это, но я изо всех сил пытаюсь найти правильное решение.У меня есть список из 48 фреймов данных, и я хотел бы удалить несколько элементов из списка. Можно ли использовать подобный код?

Используя тот же пример, что и в аналогичном вопросе, если удалить $ d2, это my.list = my.list[-2], как мне удалить $ d2, $ d3 и $ d6 - в идеале одновременно или по одному?

Последовательное написание одного и того же кода не работает, например.

my.list = my.list[-2]
my.list = my.list[-3] #or should this be [-2] as [3] has become [2] when i removed the original [2]
my.list = my.list[-6] #same again



my.list
$d1
  y1 y2
1  1  4
2  2  5
3  3  6

$d2
  y1 y2
1  3  6
2  2  5
3  1  4

$d3
  y1 y2
1  1  4
2  2  5
3  3  6

$d4
  y1 y2
1  3  6
2  2  5
3  1  4

$d5
  y1 y2
1  1  4
2  2  5
3  3  6

$d6
  y1 y2
1  3  6
2  2  5
3  1  4

1 Ответ

0 голосов
/ 26 февраля 2019

В комментариях есть множество правильных ответов с использованием числовых индексов.Вот еще одно:

my.list2 <- my.list[ !    #negation operator
                         names(my.list) %in% c('d2','d3','d6') ]  #logical index
#check
> my.list2
$d1
  y1 y2
1  1  4
2  2  5
3  3  6

$d4
  y1 y2
1  3  6
2  2  5
3  1  4

$d5
  y1 y2
1  1  4
2  2  5
3  3  6

Причина, по которой ваша попытка не удалась, состоит в том, что последовательность значений в my.list изменилась, как только вы удалили первый элемент.Обратите внимание, что я назначил другой именованный элемент.Это гораздо более безопасная стратегия.

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

Пример для тестирования:

dput(my.list)
list(d1 = structure(list(y1 = 1:3, y2 = 4:6), class = "data.frame", row.names = c("1", 
"2", "3")), d2 = structure(list(y1 = 3:1, y2 = 6:4), class = "data.frame", row.names = c("1", 
"2", "3")), d3 = structure(list(y1 = 1:3, y2 = 4:6), class = "data.frame", row.names = c("1", 
"2", "3")), d4 = structure(list(y1 = 3:1, y2 = 6:4), class = "data.frame", row.names = c("1", 
"2", "3")), d5 = structure(list(y1 = 1:3, y2 = 4:6), class = "data.frame", row.names = c("1", 
"2", "3")), d6 = structure(list(y1 = 3:1, y2 = 6:4), class = "data.frame", row.names = c("1", 
"2", "3")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...