我已经在多个论坛上寻找了一个对我有效但没有运气的答案。我可能想得太多了,但任何事情都有帮助!
我有一个数据框架覆盖率的植被覆盖率在许多网站(网站列在列中,每个物种作为一行)。我想创建一个新的列,计算每个物种存在的站点数量。例如,有多少站点的Salix覆盖率大于0?
这是一个小数据框,从现在开始。。。(站点和种类分别是列名和行名)
site1 site2 site3 site4
Salix 16.50 7.00 7.50 6.00
Betula 17.75 19.75 0.00 5.25
Alnus 0.00 0.00 0.00 0.00
Picea 0.00 0.35 0.00 0.00
我希望最后一篇专栏如下:
site1 site2 site3 site4 count
Salix 16.50 7.00 7.50 6.00 4
Betula 17.75 19.75 0.00 5.25 3
Alnus 0.00 0.00 0.00 0.00 0
Picea 0.00 0.35 0.00 0.00 1
我已经让count函数一次只能工作一行,但是在整个数据帧(比我在这里显示的要大得多)的自动化方面遇到了困难。
sum(df[1, ] > 0)
[1] 4
sum(df[2, ] > 0)
[1] 3
我试过这样的循环:
#First I created an empty column
df$count <- NA
#Then I tried to populate that column
for(i in 1:nrow(df)){
df$count <- sum(df[i, 1:ncol(df) - 1] > 0)
Error in df$count[i, ] <- sum(df[i, 1:ncol(df) - 1] > 0) :
incorrect number of subscripts on matrix
df$count <- lapply(df, MARGIN = 1, FUN = function(x) sum(x > 0))
Error in FUN(X[[i]], ...) : unused argument (MARGIN = 1)
当我尝试删除MARGIN参数时,我得到一个错误,它将列与行混淆(这个错误来自我的实际数据,即79列乘38行):
Error in `$<-.data.frame`(`*tmp*`, sites, value = list(`site1` = 15L, :
replacement has 79 rows, data has 38
有什么指导吗?