【问题标题】:How can I remove rows from all the data frames within a list?如何从列表中的所有数据框中删除行?
【发布时间】:2018-04-10 08:49:58
【问题描述】:

我正在尝试从列表中的所有数据框中删除该行。我不知道怎么做。

数据的基本结构是一个列表中的所有五个估算数据帧。 如果某些数据帧不满足条件(例如,col3

这和上一个问题有关:

How can I have a subset of a list of data frames?


(加法) 例如,我有以下数据框列表

 > temp <- list (
 data.frame(house=c(1,-3,-2), income=c(2,3,4), capital=c(3,5,6)),
 data.frame(house=c(1,-3,-2), income=c(2,3,4), capital=c(3,5,6)),
 data.frame(house=c(1,-3,NA), income=c(2,3,4),capital=c(3,5,6))
  )

> temp
[[1]]
  house income capital
1     1      2       3
2    -3      3       5
3    -2      4       6

[[2]]
  house income capital
1     1      2       3
2    -3      3       5
3    -2      4       6

[[3]]
  house income capital
1     1      2       3
2    -3      3       5
3    NA      4       6

现在,我想要没有“house

temp <- subset(temp, house>0)

首先,这段代码不起作用..我不知道为什么...其次,我代码中的另一个列表能够执行子集函数。但是,事情是三个数据帧在更改后不平衡。这是由于第三个数据帧中的 NA。它没有从第 3 个数据帧中丢弃第 3 行,因此整个列表不平衡。

正如您从上一个问题中看到的,我正在研究消费者金融数据集,他们在列表中有 5 个插补数据框,当我尝试从整个列表中修剪负房屋价值行时,它只删除了一些数据框。我猜有一个完整的公共数据集以及一个提取数据集,后者不包括房屋列.....

【问题讨论】:

  • 请清楚地说明您要做什么,并提供minimal reproducible example。也就是说——您可以使用lapply() 将计算映射到一个列表上,包括一个数据帧列表。
  • “如果某些数据帧不包含该行,我会尝试从这些数据帧中删除行。” 这是模糊和循环的。创建一个简单的例子。 my_list = list(mtcars, mtcars, mtcars)。现在,您要删除哪一行?是否有要测试的标准,或者只是特定列中的特定值?行名?第8行?....
  • 我承认我的问题很糟糕...这次我试图填补空白...但是,我对 R 的了解打断了我提出明确问题... :(

标签: r


【解决方案1】:

这就是你所追求的吗?

lapply(temp, function(x) subset(x, house > 0))
#[[1]]
#
#  house income capital
#1     1      2       3
#[[2]]
#
#  house income capital
#1     1      2       3
#[[3]]
#
#  house income capital
#1     1      2       3

或者同样可以实现

lapply(temp, function(x) x[x$house > 0 & !is.na(x$house), ])

【讨论】:

  • 这真的很好......这就是我想要的......不幸的是,我正在运行的代码不适用于这个“lapply”。它正在使用库“survey”和“mitools”,列表是乘法估算列表...这是相关文档...(r-survey.r-forge.r-project.org/survey/svymi.html
  • @user9620331 lapply 是标准的基本 R 函数。我的解决方案基于 提供的示例数据。您没有在原始帖子中提及这些软件包,这使得它成为一个完全不同的问题,您应该在单独的帖子中提出。
  • 对此感到抱歉。我将在另一个问题中提问。谢谢。
【解决方案2】:

或者来自filter来自tidyverse

library(tidyverse)
temp %>% 
     map(filter, house > 0)
#[[1]]
#  house income capital
#1     1      2       3

#[[2]]
#  house income capital
#1     1      2       3

#[[3]]
#  house income capital
#1     1      2       3

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2021-09-29
    • 2018-06-17
    相关资源
    最近更新 更多