【问题标题】:R: How can I remove rows from all the data frames in this list?R:如何从该列表中的所有数据框中删除行?
【发布时间】:2016-01-16 02:10:33
【问题描述】:

假设我有一些像这样创建的数据

n <- 3
K <- 4
dat <- expand.grid(var1=1:n, var2=1:K)

dat 看起来像这样:

    var1    var2
1     1      1
2     2      1
3     3      1
4     1      2
5     2      2
6     3      2 
7     1      3
8     2      3
9     3      3
10    1      4
11    2      4
12    3      4

我想同时从列表中的两个数据框中删除一些行。假设我要删除第 11 行,并希望填充“空白”,这样现在第 12 行将成为第 11 行。

我知道这是两个数据框的列表。因此here 的建议不适用,因为dat[[11]]&lt;-NULL 什么都不做,而dat[[2]]&lt;-NULL 将从列表中删除第二个数据框

lapply(dat,"[",11) 允许我访问相关元素,但我不知道如何删除它们。

【问题讨论】:

  • 当我输入 typeof(dat) 时,它显示“列表”。上面的代码就是我所拥有的一切。我的环境中没有任何其他数据框。
  • dat[-11,] 删除了一行,但它留下了一个间隙,我们从 10 跳到 12。我需要一个删除行但不留间隙的过程。
  • 是的,就是这样!也许我这个问题的标题不准确,因为当我写这个问题时,我误以为 dat 是一个列表。
  • 我会检查str(dat) 以了解数据集的结构。如果是liststr(list(dat, dat))

标签: r


【解决方案1】:

假设我们想从data.frames 的list 中删除行,我们使用lapply 循环list 元素并使用数字索引删除行。

lapply(lst, function(x) x[-11,])

或者没有匿名函数

lapply(lst, `[`, -11,)

“dat”是data.frame

is.data.frame(dat)
#[1] TRUE

如果我们想从 'dat' 中删除行,

dat[-11,]

如果 row.names 也需要更改

`row.names<-`(dat[-11,], NULL)

数据

lst <- list(dat, dat)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多