我在R中有一个数据框(我们称之为“动物”),其中的列以Rabbit,Cat等动物命名。它看起来像这样:
| Rabbit | Cat | Frog | Cow | Dog |
|--------|-----|------|-----|-----|
| 0 | 1 | 1 | 0 | 1 |
| 0 | 0 | 3 | 1 | 4 |
| 2 | 1 | 0 | 0 | 0 |
列表中有数百行,而且还有更多的动物(列)。
我想为每个动物的数据大于0的动物获取该数据帧的子集。例如,我想要一个子集化的兔子数据帧,只有动物行中的兔子> 0
首先我尝试创建一个变量“species”:
species <- "Rabbit"
然后,我尝试使用dplyr的filter():
对Animals数据框进行子集化Rabbits <- filter(Animals, species >= 1)
这不起作用,因为filter()试图寻找一个圆柱形命名的“物种”而不是“兔子”。
我创建了“种类”变量,因为我希望通过循环遍历所有动物名称的矢量并将其子集化为相应的数据帧来自动化该过程。
对此有更有效的方法吗?
我对R很新,所以任何ELI5解释都会受到赞赏。谢谢!
答案 0 :(得分:1)
您可以使用[]
语法按名称访问列。
toKeep <- Alimals[species] >= 1
然后
Rabbit <- Animals[toKeep,]
答案 1 :(得分:1)
这是一种通过传入的列创建每个子集的data.frames列表的方法:
datasets <- lapply(colnames(mtcars), function(v) subset(mtcars, mtcars[,v] > 0))
只需将colnames(mtcars)
更改为您的种类变量,然后mtcars
更改为您的data.frame。