我正在尝试从列表中的所有数据框中删除该行。我不知道怎么做。
数据的基本结构是一个列表中的所有五个插补数据帧。 如果某些数据帧不满足条件,我试图从那些数据帧中删除行(例如,col3< = 0,即删除具有负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&lt; = 0' 所以我想做这样的事情,
temp <- subset(temp, house>0)
首先,这段代码不起作用..我不知道为什么......第二,我的代码中的另一个列表能够执行子集函数。然而,事情是三个数据帧在更改后不平衡。这是由于第3个数据帧中的NA。它没有丢弃第3个数据帧的第3行,因此整个列表不平衡。
从上一个问题可以看出,我正在研究消费者金融调查数据集,他们在列表中有5个插补数据框,当我尝试从整个列表中修剪负房屋价值行时,它只会被删除一些数据框架。我想有一个完整的公共数据集和一个提取数据集,后者不包括房屋栏.....
答案 0 :(得分:2)
这是你之后的事吗?
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), ])
答案 1 :(得分:0)
来自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