我正在努力尝试在数据框的特定位置插入 NAs 列。

例如,我有数据集:

dataset <- data.frame(c1 = 1:5,
                      c2 = 2:6,
                      c3 = 3:7,
                      c4 = 4:8,
                      c5 = 5:9,
                      c6 = 10:14,
                      c7 = 15:19,
                      c8 = 20:24,
                      c9 = 25:29,
                      c10 = 30:34)

在本例中,我想在 dataset 的每 2 个现有列之后插入 4 个 NAs 列。答案是这样的:
dataset.answer <- data.frame(c1 = 1:5,
                             c2 = 2:6,
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c3=3:7,
                             c4=4:8,
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c5=5:9,
                             c6=10:14,
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c7=15:19,
                             c8=20:24,
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c.und.1<-rep(NA,dim(dataset)[1]),
                             c9=25:29,
                             c10=30:34)

对它的优雅方式有什么建议吗?

最佳答案

也许下面的基本 R 解决方案不是很优雅,但我相信它有效。

insertNAcol <- function(DF, every = 2, na.cols = 4){
  n <- ncol(DF)
  tmp <- DF[1]
  tmp[2:(1 + na.cols)] <- NA
  tmp <- tmp[-1]
  m <- n %/% na.cols
  res <- DF[1:every]
  for(i in seq_len(m)[-1]){
    DF2 <- DF[(every*(i - 1) + 1):(every*i)]
    res <- cbind.data.frame(res, tmp, DF2)
  }
  res <- cbind(res, tmp, DF[(n - every + 1):n])
  res
}

insertNAcol(dataset)
insertNAcol(dataset, 3, 3)

关于r - 在 R 中数据框的特定位置插入 NAs 列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54278889/

10-12 16:32
查看更多