我想尽可能有效地根据另一列值对一列的值求和。我不确定是否有办法使用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。
答案 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