我有一个数据,诊断在x轴(从诊断1到30)和ID-号在y-轴。观察是病人通过医生得到的不同的诊断。
我有一个更大的数据,我做了Traminer序列分析,并得到了上面描述的数据。看起来是这样的:
所以我想做一个新的数据,在第一次诊断中,我将所有患有“癌症”的患者分组,并将所有“一无所有”的患者作为第一次诊断,等等。这是因为数据帧太大了,我想用这种方式最小化。
数据示例:
set.seed(1)
Data <- data.frame( d1 = sample(c("cancer", "cancer", "cancer",
"cancer","nothing", "cancer","cancer", "cancer" )), d2 = sample(c("cancer",
"headache", "cancer", "cancer", "nothing", "nothing", "nothing", "nothing")),
d3 = sample(c("cancer", "headache", "cancer", "cancer", "headache", "nothing",
"nothing", "headache")) )这有可能吗?
预期成果:
我希望有一个结果,我可以看到有多少人有癌症作为第一次诊断,“没有”作为第一次诊断,等等。也许是这样的:
D1 D2 D3 D4 D5 ECT. CANCER 5 4 HEADACHE 4 3 NOTHING 1 3
发布于 2019-01-03 09:38:02
一种方法是使用转换为长格式,计数,然后传播到宽格式再次。用tidyverse来做,
library(tidyverse)
Data %>%
gather(var, val) %>%
group_by_all() %>%
count() %>%
spread(var, n)这给了,
答:3 x 4 val d1 d2 d3 1癌症7 3 3 2头痛NA 1 3 3 3无1 4 2
发布于 2019-01-03 09:49:57
这可能会变得更优雅,但它将完成reprex数据的工作,以及其他方面的工作:
library(tidyverse)
df <- as.tibble(table(Data$d1)) %>%
rename(D1 = n) %>%
merge(as.tibble(table(Data$d2)), by = "Var1", all = TRUE) %>%
rename(D2 = n) %>%
merge(as.tibble(table(Data$d3)), by = "Var1", all = TRUE) %>%
rename(D3 = n)来自reprex数据的结果:
Var1 D1 D2 D3
1 cancer 7 3 3
2 headache NA 1 3
3 nothing 1 4 2在某个时刻,如果重复相同的事情,您可能希望将其包装到一个函数中。
https://stackoverflow.com/questions/54018915
复制相似问题