在r中创建一个包含多个列的表

时间:2016-01-26 11:06:13

标签: r data.table

我显然是编写R代码的新手。 我已经从stackoverflow尝试了多个解决方案来解决我的问题,但我仍然陷入困境。

我的数据集是类癌,患有小肠癌的患者,有多个变量。

我想知道如何分配不同的变量

carcinoid$met_any - with metastatic disease 1=yes, 2=no(computed variable)
carcinoid$liver_mets_y_n  - liver metastases 1=yes, 2=no
carcinoid$regional_lymph_nodes_y_n  - regional lymph nodes 1=yes, 2=no
peritoneal_carcinosis_y_n  - peritoneal carcinosis 1=yes, 2=no

我试过这个接近我想要的结果的解决方案

ddply(carcinoid, .(carcinoid$met_any), summarize,
      livermetastases=sum(carcinoid$liver_mets_y_n=="1"),
      regionalmets=sum(carcinoid$regional_lymph_nodes_y_n=="1"),
      pc=sum(carcinoid$peritoneal_carcinosis_y_n=="1"))

结果为:

  carcinoid$met_any livermetastases regionalmets pc
1                 1              21           46  7
2                 2              21           46  7

现在,我预计2(=没有转移)的行是空的。我也希望列类似物中的行$ met_any给出患者数量。

如果有人可以帮助我,我将非常感激! 约翰

修改

我的数据集,虽然列号为:1,4328,31,33
1 = YES2 =无

case_nr          met_any     liver_mets_y_n   regional_lymph_nodes_y_n pc
1                   1               1                  1                2
2                   1               2                  1                2               
3                   2               2                  2                2
4                   1               2                  1                1               
5                   1               2                  1                1

所需的输出 - 我想计算1:s和2:s的数字,如果有效,所有1:s应该以met_any = 1行结束

           nr   liver_mets        regional_lymph_nodes        pc
met_any=1  4         1                    4                    2
met_any=2  1         4                    1                    3

修改

虽然我可能在我的问题中非常不清楚,但在你的帮助下,我可以制作我需要的桌子!

setDT(carcinoid)[,lapply(.SD,table),.SDcols=c(43,28,31,33,17)]

给出

     met_any lymph_nod liver_met     paraortal            extrahep
1:      50      46       21              6               15
2:     111     115      140             151              146

我非常感激! @mtoto提供了解决方案 约翰

1 个答案:

答案 0 :(得分:1)

根据您的示例数据,此data.table方法有效:

library(data.table)
setDT(df)[,lapply(.SD,table),.SDcols=c(2:5)]

# met_any liver_mets_y_n regional_lymph_nodes_y_n pc
# 1:       4              1                        4  2
# 2:       1              4                        1  3