我有一个包含900列的数据框。我希望dplyr::transmute
(例如,汇总)第1:3,4:6,7:9列,很快就会出现整个数据帧。可以使用父列名称中的文本创建新子列名称,但当然不能与其他列名称匹配。我该怎么做呢?
非常感谢你:))
包含6列的示例df:
int_sam_1 = c("2421432", "24242424", "NA", "4684757849", "NA", "10485040", "NA",
"6849400", "40300", "NA", "NA", "NA", "556456466", "4646456466", "246464266", "4564242646")
int_sam_2 = c("NA", "5342353", "14532556", "43566", "46367367", "768769769", "797899", "NA", "NA", "NA",
"686899", "7898979", "678568", "NA", "68886", "488")
int_sam_3 = c("11351", "NA", "NA", "NA", "1354151345", "1351351354", "314534", "1535", "3145354", "4353455",
"324535", "3543445", "34535", "34535534", "NA", "NA")
int_sam_1a = c("2421432", "24242424", "NA", "4684757849", "NA", "10485040", "NA",
"6849400", "40300", "NA", "NA", "NA", "556456466", "4646456466", "246464266", "4564242646")
int_sam_2a = c("NA", "5342353", "14532556", "43566", "46367367", "768769769", "797899", "NA", "NA", "NA",
"686899", "7898979", "678568", "NA", "68886", "488")
int_sam_3a = c("11351", "NA", "NA", "NA", "1354151345", "1351351354", "314534", "1535", "3145354", "4353455",
"324535", "3543445", "34535", "34535534", "NA", "NA")
df = cbind.data.frame(int_sam_1, int_sam_2, int_sam_3, int_sam_1a, int_sam_2a, int_sam_3a)
答案 0 :(得分:0)
如果没有特别需要dplyr,这里有一个基本R解决方案:
df <- cbind.data.frame(int_sam_1, int_sam_2, int_sam_3, int_sam_1a, int_sam_2a, int_sam_3a)
df <- data.frame(apply(df,2,as.numeric))
创建一个自定义函数,将rowSums或其他适当的函数应用于3列df的子集。 &#39; N&#39;是子集
的第一列的列索引fn <- function(df,n) {
df1 <- data.frame( rowSums(df[,seq(as.numeric(n),as.numeric(n)+2)], na.rm = TRUE) )
colnames(df1) <- paste0(colnames(df[,seq(as.numeric(n),as.numeric(n)+2)]), collapse = '.')
return(df1)
}
对序列1,4,...(假设列的总数是3的倍数)进行透明度
df2 <- data.frame(sapply(seq(1,ncol(df),3), fn, df = df ))
df2
输出:
int_sam_1.int_sam_2.int_sam_3 int_sam_1a.int_sam_2a.int_sam_3a
1 2432783 2432783
2 29584777 29584777
3 14532556 14532556
4 4684801415 4684801415
5 1400518712 1400518712
6 2130606163 2130606163
....