首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据中的相同观测结果分组为一组

如何将数据中的相同观测结果分组为一组
EN

Stack Overflow用户
提问于 2019-01-03 08:46:45
回答 2查看 95关注 0票数 0

我有一个数据,诊断在x轴(从诊断1到30)和ID-号在y-轴。观察是病人通过医生得到的不同的诊断。

我有一个更大的数据,我做了Traminer序列分析,并得到了上面描述的数据。看起来是这样的:

  • d1 (诊断1)等。
  • 下面我所说的诊断只是一个例子。 d1 d2 d3 d4 d5 d6 d7等1癌症2癌症3无4无5癌症6头痛

所以我想做一个新的数据,在第一次诊断中,我将所有患有“癌症”的患者分组,并将所有“一无所有”的患者作为第一次诊断,等等。这是因为数据帧太大了,我想用这种方式最小化。

数据示例:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2019-01-03 09:38:02

一种方法是使用转换为长格式,计数,然后传播到宽格式再次。用tidyverse来做,

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2019-01-03 09:49:57

这可能会变得更优雅,但它将完成reprex数据的工作,以及其他方面的工作:

代码语言:javascript
复制
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数据的结果:

代码语言:javascript
复制
      Var1 D1 D2 D3
1   cancer  7  3  3
2 headache NA  1  3
3  nothing  1  4  2

在某个时刻,如果重复相同的事情,您可能希望将其包装到一个函数中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54018915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档