我有一个df,其中有多个感兴趣的列(比如在示例中的第3列到第5列),这些列的值是0或1。行表示单个网格单元格。T使用R,我现在想在这个df中添加一个列'COUNT',它列出每个单元格**有多少个列3到5中有1,然后添加另一个列'NAMES'列出列的名称。
这里有一个df的例子
df <- data.frame(var1 = c(sample(c(0:1), 10, replace = T)),
var2 = c(sample(c(0:1), 10, replace = T)),
var3 = c(sample(c(0:1), 10, replace = T)),
var4 = c(sample(c(0:1), 10, replace = T)),
var5 = c(sample(c(0:1), 10, replace = T)),
var6 = c(sample(c(0:1), 10, replace = T)))
不知道这是否重要,有问题的df是类'sf'和'data.frame'。任何想法如何在R中做到这一点将非常感谢。
2条答案
按热度按时间ljsrvy3e1#
使用
tidyverse
-通过pick
对'var 3'到'var 5'列执行操作来创建COUNT
,并获得行求和(rowSums
-因为它是二进制的,0值不会相加),然后循环across
列,用列名替换1(cur_column()
),默认情况下TRUE
将是NA,通过粘贴将tibble列转换为具有unnest_wider
和unite
的适当列,同时删除具有na.rm = TRUE
的NA,将NAMES_
转换为单列eeq64g8w2#
下面是一个基本的R方法:
或者,您可以对
data.table
使用相同的方法:编辑:我注意到输出与@akrun的响应不同,所以我用
set.seed(100)
重新运行了它,以获得重现性。