首页 > 解决方案 > 如何转换这个数据框?排序因子和组合

问题描述

我有这个数据框

df<-data.frame(ID=c(1,1,2,2,2),A=c(1,2,1,2,3),B=c("A","T","T","A","G"))

  ID A B
1  1 1 A
2  1 2 T
3  2 1 T
4  2 2 A
5  2 3 G

我需要这个汇总表

summary_df <- data.frame(ID = c(1,2), sort_factor_and_combin_B = c("A-T","A-T-G"))

  ID sort_factor_and_combin_B
1  1                      A-T
2  2                    A-T-G

无论 A 列的顺序如何,我都想创建一个列,该列包含按字母顺序与每个 ID 具有的 B 列中的因子连接的字符。

2.同时我也想要一个按照A的顺序加入的列。

你有什么主意吗?

谢谢你!

标签: rdplyrtidyverse

解决方案


我们可以用tapply()

tmp1 <- tapply(df$B, df$ID, function(x){
  paste(sort(x), collapse = "-")
})

# cbind to desired format
cbind("ID" = unique(df$ID),
"sort_factor_and_combin_B" = tmp1)

#   ID  sort_factor_and_combin_B
# 1 "1" "A-T"                   
# 2 "2" "A-G-T"  

推荐阅读