根据其他列值对列进行求和

时间:2018-06-06 19:14:45

标签: r dplyr

我想尽可能有效地根据另一列值对一列的值求和。我不确定是否有办法使用summaryrize命令。以下是一个示例数据集:

Cancer1   Cancer2   Cancer3   Disease1
1         0         1         1
0         1         0         0
1         0         0         1 

在这种情况下,我希望根据患者是否患有癌症来总结疾病1。我正在寻找一个输出,可以说癌症1和疾病1的总人数是2,癌症2和疾病1的总人数是0,癌症3和疾病1的总人数是1。

3 个答案:

答案 0 :(得分:1)

我们可以在“癌症”列上使用HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs 创建变量,然后乘以二进制“疾病”列

rowSums

答案 1 :(得分:0)

您可能需要查看dplyr::count()

# sum up the number of people that have Cancer1 and Disease1:
foo <- ds %>% count(Cancer1 , Disease1)

# extract the integer result you are looking for:
foo %>% filter(Cancer1 == 1, Disease1== 1) %>% pull(n)

答案 2 :(得分:0)

我不想马上回答代码答案,而是想提供一些关于数据格式化的(未经请求的)建议:

在我看来,你可以从长桌上获益,而不是你拥有的宽桌(你可能有更多的癌症类型,例如“cancer_n”;以及更多疾病,如“disease_n” )。对于拥有长表,您可能会发现有必要为每条记录定义某种id。另外,为了完整的结果,我想提供一个data.table解决方案:

require(data.table) # loads the package

a <- data.table(id = 1:3, 
                Cancer1 = c(1,0,1), 
                Cancer2 = c(0,1,0), 
                Cancer3 = c(1, 0,0), 
                Disease1 = c(1,0,1)) # create a data.table with an additional id

# melt the data.table (make it long-form), and calculate the expected result:
melt(a, c("Disease1", "id"))[Disease1 == 1 & value == 1, .N, by = variable]

   variable N
1:  Cancer1 2
2:  Cancer3 1