首页 > 解决方案 > 如何按列值选择数据框列表中的行

问题描述

我有一个包含四个数据框的列表(lfs01),每个数据框都有不同数量的列和行。

我想按一列中的值过滤所有数据框中的行(如果 == 1)。该变量在前两个数据帧中称为“a”,在后两个数据帧中称为“A”。

我查看了以前的类似问题,但不幸的是我没有找到解决方案。

以下是我尝试过的事情:

data<-lapply(lfs01, function(x) filter(x ,'a'==1))

data<-lapply(lfs01, function(x) filter(x ,'a'==1|'A' ==1))

``` 

# Result:  a - list of 4 data frames with 0 rows.

 ```
data<-as.list(1:4)
for(i in 1:length(lfs01)){
  data[[i]]<-lfs01[[i]]%>%
    filter('a'== 1)
}
```
# and

```
data<-map(lfs01, ~filter(.x, 'a'%in%1 ))

```

# Results as above - list of 4 data frames with 0 rows. 

Many thanks in advance!

标签: r

解决方案


一种可能的方法是重命名列,以便所有数据框都具有相同的名称,并且很容易对它们进行子集化。如果您事先知道该列的位置,另一种方法可能是根据位置对数据帧进行子集化。

如果以上都不可能,那么我们可以检查是否存在特定名称并subset相应地使用命令。

lapply(lfs01,function(x) if('a' == names(x)) subset(x,a == 1) else subset(x,A == 1))

推荐阅读