如何将data.frame中的2列转换为2个不同的列? 即:
Data
A B C D
1 3 5 7
2 4 6 8
到
Data
A B
1 3
2 4
5 7
6 8
答案 0 :(得分:3)
您可以使用rbind
rbind(df[,1:2], data.frame(A = df$C, B = df$D))
答案 1 :(得分:2)
这是我的解决方案,但需要更改列的名称。
names(dat) <- c("A", "B", "A", "B")
merge(dat[1:2], dat[3:4], all = T)
A B
1 1 3
2 2 4
3 5 7
4 6 8
这是另一个更容易的解决方案。
dat[3:4, ] <- dat[ ,3:4]
dat <- dat[1:2]
dat
A B
1 1 3
2 2 4
3 5 7
4 6 8
答案 2 :(得分:2)
对于可伸缩性,该解决方案将任意大小的数据帧减半并附加行:
half <- function(df) {m <- as.matrix(df)
dim(m) <- c(nrow(df)*2,ncol(df)/2)
nd <- as.data.frame(m)
names(nd) <- names(df[(1:dim(nd)[2])]);nd}
half(Data)
A B
1 1 5
2 2 6
3 3 7
4 4 8
答案 3 :(得分:2)
您可以使用data.table中的rbind
,rbindlist
的快速版本:
library(data.table)
rbindlist(lapply(seq(1, ncol(df), 2), function(i) df[,i:(i+1)]))