我是新来的,并且已经搜索了很多个小时,所以如果在其他地方得到解答并且可以更好地制定,我很抱歉。我想根据列和中其他列的因素的相互作用来区分计数,这样我就可以对计数进行一些分析。这是一个寄生虫计数的玩具数据集,每个宿主有两个分类水平。两个维度的数据集都要大得多。
df <- setNames(data.frame(matrix(ncol = 5, nrow = 16)), c("count", "hostclass","hostspecies", "parclass","parspecies"))
df$count <- c(1,2,1,2,1,1,2,3,5,1,2,3,4,1,2,3)
df$hostclass <- c(rep("mammal",8),rep("bird",8))
df$parclass <- c("cestode",rep("trematode",5), rep("arachnid",6),rep("cestode",4))
df$hostspecies <- c(rep("human",3),rep("dog",3),rep("cat",2), rep("crow",4),rep("duck",4))
df$parspecies <- c("worm1",rep("fluke1",3), rep("fluke2",2), rep("tick1", 3), rep("tick2",3),rep("worm2",4))
以下是一些玩具数据:
DF
count hostclass hostspecies parclass parspecies
1 1哺乳动物人绦虫1 2 2哺乳动物人类吸虫fluke1
3 1哺乳动物人类吸虫fluke1
4 2哺乳动物狗吸虫fluke1
5 1哺乳动物狗吸虫fluke2
我可以根据两列中的交互将数据框拆分成一个列表,然后隔离计数:
Inter <- split(df, with(df, interaction(df$hostclass, df$parspecies)), drop = TRUE)
cnts <- lapply(Inter,'[[',1)
但我想为宿主和寄生虫分组的每次互动做这件事:
1)hostpecies-parspecies;
2)hostspecies-parclass;
3)hostclass-parspecies(上面的例子);
4)hostclass-parclass。
换句话说,我希望两列中的因子相互作用,并扩展到所有主机和寄生虫列的所有交互。
理想情况下,输出看起来像cnts,只会更长,因为它将包括上面1到4中列出的所有交互。 感谢您提供任何帮助!
答案 0 :(得分:0)
在dplyr
中,您可以在分组(n())
列上使用计数(group_by)