R中的群与转置
我有这个数据集[在这里输入图像描述][1](列名为Cancer&Frequency) 我希望输出中有CNS PiloAstro和Eso Adoneca作为列名,并在下面列出频率。我如何根据“癌症”对它们进行分组和转置? [1]:R中的群与转置,r,group-by,transpose,R,Group By,Transpose,我有这个数据集[在这里输入图像描述][1](列名为Cancer&Frequency) 我希望输出中有CNS PiloAstro和Eso Adoneca作为列名,并在下面列出频率。我如何根据“癌症”对它们进行分组和转置? [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) d
谢谢你的帮助 这将频率相加,并将癌症作为列名
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
cns=c(1,4,1,1,3,1,2,6,5,1,2,1,2,3,4)
eso=c(125131,80,69,34204123137,66112113126125,73218130,57314)
df=数据帧(癌症=c(代表(“CNS PiloAstro”,长度(CNS)),代表(“Eso AdenoCa”,长度(Eso))),频率=c(CNS,Eso))
图书馆(dplyr)
图书馆(tidyr)
df1=分组依据(df,癌症)%>%总结(跨越(频率,总和))
枢轴宽度(df1,名称=癌症,值=频率)
#一个tibble:1x2
`CNS PiloAstro ``Eso腺癌`
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
df2=data.frame()
癌症=唯一(df$癌症)
用于(i/1:长度(癌症)){
val=filter(df,cancer==cancers[i])%%>%select(freq)%%>%unlist()
tmp=数据帧(val)
colnames(tmp)=癌症[i]
如果(i==1){
df2=tmp
下一个
}
如果(nrow(tmp)nrow(df2)){
额外=nrow(tmp)-nrow(df2)
用于(j in 1:额外){
df2[nrow(df2)+1,]=rep(NA,ncol(df2))
}
}
df2=cbind(df2,tmp)
}
df2
中枢神经系统PiloAstro-Eso腺癌
频率11125
频率2 4 131
频率3180
频率4169
频率5 3 34
频率6 1 204
频率7 2 123
频率8 6 137
频率9566
频率101112
频率11 2 113
频率12 1 126
频率13 2 125
频率14373
频率15 4 218
16 NA 130
17 NA 57
18 NA 314
请让那些试图帮助您的人更方便。不要将数据/代码添加为图像。提供一个可复制的示例以及预期输出。了解。