首页 文章

使用变量通过每列的条件在R中对数据帧进行子集

提问于
浏览
0

我在R中有一个数据框(我们称之为“动物”),其中的列以Rabbit,Cat等动物命名 . 它看起来像这样:

| Rabbit | Cat | Frog | Cow | Dog |
|--------|-----|------|-----|-----|
| 0      | 1   | 1    | 0   | 1   |
| 0      | 0   | 3    | 1   | 4   |
| 2      | 1   | 0    | 0   | 0   |

列表中有数百行,并且还有更多的动物(列) .

我想为每个动物的数据大于0的动物获取该数据帧的子集 . 例如,我想要一个子集化的兔子数据帧,只有动物中的行,其中Rabbit> 0 .

首先,我尝试创建一个变量“物种”:

species <- "Rabbit"

然后,我尝试使用dplyr的filter()对Animals数据框进行子集化:

Rabbits <- filter(Animals, species >= 1)

这不起作用,因为filter()试图寻找一个圆柱形命名的“物种”而不是“兔子” .

我创建了“物种”变量,因为我希望通过循环遍历所有动物名称的向量并将它们子集化为相应的数据帧来自动化该过程 .

有更有效的方法吗?

我对R很新,所以任何ELI5解释都会受到赞赏 . 谢谢!

2 回答

  • 1

    您可以使用 [] 语法按名称访问列 .

    toKeep <- Alimals[species] >= 1
    

    然后

    Rabbit <- Animals[toKeep,]
    
  • 1

    这是一种通过传入的列创建data.frames列表的方法:

    datasets <- lapply(colnames(mtcars), function(v) subset(mtcars, mtcars[,v] > 0))
    

    只需将 colnames(mtcars) 更改为您的物种变量,并将 mtcars 更改为您的data.frame .

相关问题