【发布时间】:2017-05-12 23:38:33
【问题描述】:
我的数据集中的每一行都是不同的树。 Plot 是指采样区域(其中大约有 700 个),Species 是树的种类,其他列是树是否存在(1)或不存在(NA)。下面是数据集的一个最小示例
Plot Species 1983 1988 2003 2008 2013
1 11 1 1 1 1 1
1 11 1 1 1 1 NA
1 21 NA 1 1 1 1
2 11 1 1 1 NA NA
2 34 1 1 1 1 1
3 15 1 1 1 1 NA
3 15 NA 1 1 1 NA
3 11 1 1 1 1 NA
基本上我想知道的是每个地块每年有多少种不同的物种,不包括NA值:
Plot 1983 1988 2003 2008 2013
1 1 2 2 2 2
2 2 2 2 1 1
3 2 2 2 2 0
我当前的策略如下 - 将所有值 1 更改为它们的物种编号,因此数据集如下所示
Plot Species 1983 1988 2003 2008 2013
1 11 11 11 11 11 11
1 11 11 11 11 11 NA
1 21 NA 21 21 21 21
2 11 11 11 11 NA NA
2 34 34 34 34 34 34
3 15 15 15 15 15 NA
3 15 NA 15 15 15 NA
3 11 11 11 11 11 NA
然后根据地块编号使用分割数据集
split(data, as.factor(data$Plot))
我想我本质上想要每列的长度来找出有多少不同的值,但 colSums 不考虑不同的图。当我有一个拆分列表时,我不确定如何使用应用功能。
欢迎提出任何建议! 谢谢
【问题讨论】:
-
我认为
rowsum(df[-(1:2)], group=df$lot, na.rm=TRUE)会做到这一点,尽管它与您的总和不太相符。例如,1988 的第三个元素是 3 而不是 2。 -
@Imo 似乎主要工作,但它似乎添加了实际值,而不是存在的不同值的数量。 1988 的第三个元素应该是 2,因为存在两种不同的物种(15 和 11)
-
@Henrik 你是对的!为那里的错误道歉,将编辑它