这会汇总频率并将癌症作为列名。
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