dplyr在定义数量的列

时间:2018-06-16 01:10:55

标签: dataframe dplyr stringr mutate

我有一个包含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)

1 个答案:

答案 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
....