【问题标题】:Group and Transpose in RR中的分组和转置
【发布时间】:2021-03-05 04:25:38
【问题描述】:

我有这个数据集 [在此处输入图像描述][1](列名是癌症和频率)

我希望输出以 CNS-PiloAstro 和 Eso-AdenoCa 作为列名并在下面列出频率。如何按“癌症”对它们进行分组并转置? [1]:https://i.stack.imgur.com/NoeME.png 感谢您的帮助!

【问题讨论】:

  • 请让那些试图帮助你的人更容易。不要将数据/代码添加为图像。提供一个可重现的示例以及预期的输出。阅读how to give a reproducible example

标签: r group-by transpose


【解决方案1】:

这会汇总频率并将癌症作为列名。

cns=c(1,4,1,1,3,1,2,6,5,1,2,1,2,3,4)
eso=c(125,131,80,69,34,204,123,137,66,112,113,126,125,73,218,130,57,314)
df=data.frame(cancer=c(rep("CNS-PiloAstro", length(cns)), rep("Eso-AdenoCa", length(eso))), freq=c(cns, eso))
library(dplyr)
library(tidyr)
df1=group_by(df, cancer) %>% summarize(across(freq ,sum))
pivot_wider(df1, names_from=cancer, values_from=freq)

# A tibble: 1 x 2
  `CNS-PiloAstro` `Eso-AdenoCa`
            <dbl>         <dbl>
1              37          2237

或者,如果您想保留单个频率,您可以这样做:

df2=data.frame()
cancers=unique(df$cancer)
for (i in 1:length(cancers)) {
  val=filter(df, cancer==cancers[i]) %>% select(freq) %>% unlist()
  tmp=data.frame(val)
  colnames(tmp)=cancers[i]
  if (i==1) {
    df2=tmp
    next
  }
  if (nrow(tmp) < nrow(df2)) {
    extra=nrow(df2)-nrow(tmp)
    for (j in 1:extra) {
      tmp[nrow(tmp)+1,]=NA
    }
  } else if (nrow(tmp) > nrow(df2)) {
    extra=nrow(tmp)-nrow(df2)
    for (j in 1:extra) {
      df2[nrow(df2)+1,]=rep(NA, ncol(df2))
    }
  }
  df2=cbind(df2, tmp)
}
df2

       CNS-PiloAstro Eso-AdenoCa
freq1              1         125
freq2              4         131
freq3              1          80
freq4              1          69
freq5              3          34
freq6              1         204
freq7              2         123
freq8              6         137
freq9              5          66
freq10             1         112
freq11             2         113
freq12             1         126
freq13             2         125
freq14             3          73
freq15             4         218
16                NA         130
17                NA          57
18                NA         314

【讨论】:

    猜你喜欢
    • 2017-06-17
    • 1970-01-01
    • 2019-08-01
    • 2020-03-12
    • 1970-01-01
    • 2015-03-22
    • 2020-06-08
    • 2018-10-25
    • 2023-01-11
    相关资源
    最近更新 更多