【问题标题】:Insert an empty column between every column of a dataframe in R在 R 中数据框的每一列之间插入一个空列
【发布时间】:2015-07-09 11:37:58
【问题描述】:

假设你有一个四列的数据框:

dat <- data.frame(A = rnorm(5), B = rnorm(5), C = rnorm(5), D = rnorm(5))

并且您想在数据框中的每个列之间插入一个空列,以便输出为:

           A A1           B B1          C C1           D D1
1 1.15660588 NA  0.78350197 NA -0.2098506 NA  2.07495662 NA
2 0.60107853 NA  0.03517539 NA -0.4119263 NA -0.08155673 NA
3 0.99680981 NA -0.83796981 NA  1.2742644 NA  0.67469277 NA
4 0.09940946 NA -0.89804952 NA  0.3419173 NA -0.95347049 NA
5 0.28270734 NA -0.57175554 NA -0.4889045 NA -0.11473839 NA

你会怎么做?

我想要执行此操作的数据框有数百列,因此显然我不想输入每一列并像这样天真地添加它们:

dat$A1 <- NA
dat$B1 <- NA
dat$C1 <- NA
dat$D1 <- NA

dat <- dat[, c("A", "A1", "B", "B1", "C", "C1", "D", "D1")]

提前感谢您的帮助!

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    你可以试试

     res <- data.frame(dat, dat*NA)[order(rep(names(dat),2))]
     res     
     #           A A.1           B B.1          C C.1           D D.1
     #1 1.15660588  NA  0.78350197  NA -0.2098506  NA  2.07495662  NA
     #2 0.60107853  NA  0.03517539  NA -0.4119263  NA -0.08155673  NA
     #3 0.99680981  NA -0.83796981  NA  1.2742644  NA  0.67469277  NA
     #4 0.09940946  NA -0.89804952  NA  0.3419173  NA -0.95347049  NA
     #5 0.28270734  NA -0.57175554  NA -0.4889045  NA -0.11473839  NA
    

    注意:我将. 留在列名中,因为删除它是一项微不足道的任务。

    或者另一种选择是

    dat[paste0(names(dat),1)] <- NA
    dat[order(names(dat))]
    

    【讨论】:

      【解决方案2】:

      你可以试试这个

      df <- cbind(dat, dat)
      df <- df[, sort(names(df))]
      df[, seq(2, 8,by=2)] <- NA
      names(df) <- sub("\\.", "", names(df))
      

      【讨论】:

        【解决方案3】:
        # create new data frame with twice the number of columns
        bigdat <- data.frame(matrix(ncol = dim(dat)[2]*2, nrow = dim(dat)[1]))
        
        # set sequence of target column indices
        inds <- seq(1,dim(bigdat)[2],by=2)
        
        # insert values
        bigdat[,inds] <- dat
        
        # set column names
        colnames(bigdat)[inds] <- colnames(dat)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-13
          • 1970-01-01
          • 2018-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多