我正在努力尝试在数据框的特定位置插入 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/