例如一個大的數據幀,插入在重複位置空白欄的在R中
dataX = data.frame(a=c(1:5),b=c(2:6),c=c(3:7),d=c(4:8),e=c(5:9),f=c(6:10))
如何插入每2列之後的空白欄?
例如一個大的數據幀,插入在重複位置空白欄的在R中
dataX = data.frame(a=c(1:5),b=c(2:6),c=c(3:7),d=c(4:8),e=c(5:9),f=c(6:10))
如何插入每2列之後的空白欄?
我們可以使用使用split
分裂的獨特位置數據集成的data.frame
,環list
通過list
,cbind
與NA
和cbind
元素一起
res <- do.call(cbind, setNames(lapply(split.default(dataX, (seq_len(ncol(dataX))-1)%/%2),
function(x) cbind(x, NewCol = NA)), NULL))
res
# a b NewCol c d NewCol e f NewCol
#1 1 2 NA 3 4 NA 5 6 NA
#2 2 3 NA 4 5 NA 6 7 NA
#3 3 4 NA 5 6 NA 7 8 NA
#4 4 5 NA 6 7 NA 8 9 NA
#5 5 6 NA 7 8 NA 9 10 NA
names(res) <- make.unique(names(res))
絕對完美。爲了提高我的知識和學習能力,請你用2行來解釋這是如何工作的?這將是非常有幫助的。 –
@AKR謝謝,如果你注意到'split.default(dataX,(seq_len(ncol(dataX)) - 1)%/%2)',它會將data.frame分割成2列數據的list。每個框架。然後,我們循環訪問'list',並用'cbind'添加一個新的NA列。最後,所有'list'元素都被轉換爲一個單獨的數據框,其中'do.call(cbind' – akrun
讓我們建立一個空的數據幀相同的行數作爲DATAX
empty_df <- data.frame(x1=rep(NA,nrow(df)),x2=rep(NA,nrow(df)),x3=rep(NA,nrow(df)))
dataX<-cbind(dataX,empty_df)
dataX<-dataX[c("a","b","x1","c","d","x2","e","f","x3")]
導致:
a b x1 c d x2 e f x3
1 1 2 NA 3 4 NA 5 6 NA
2 2 3 NA 4 5 NA 6 7 NA
3 3 4 NA 5 6 NA 7 8 NA
4 4 5 NA 6 7 NA 8 9 NA
5 5 6 NA 7 8 NA 9 10 NA
這是一個類似的方法,使用矩陣和整數列選擇技巧。原始data.frame獲得一個帶有cbind
的NA列。然後用每兩列引用這個新對象的列,然後使用矩陣用rbind
填充最後一列來填充最終的NA列。
cbind(dataX, NewCol=NA)[c(rbind(matrix(seq_along(dataX), 2), ncol(dataX)+1))]
a b NewCol c d NewCol.1 e f NewCol.2
1 1 2 NA 3 4 NA 5 6 NA
2 2 3 NA 4 5 NA 6 7 NA
3 3 4 NA 5 6 NA 7 8 NA
4 4 5 NA 6 7 NA 8 9 NA
5 5 6 NA 7 8 NA 9 10 NA
爲什麼你想這樣做?出於某種原因你是否依靠列順序? –
@docendodiscimus是的先生。我有一個重複1094列的數據框。我需要爲此撰寫一份研究論文,但如果我在重複的特定點上留有空白列,我的工作將變得非常容易。 –