从R中的数据帧列表中删除特定的数据帧

时间:2019-02-25 22:04:58

标签: r indexing

我已阅读并使用了以下问题(Remove specific data frame from a list of data frames in 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 :(得分:1)

使用数字索引的注释中有多种有效答案。这是另一个:

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")))