将数据帧从行id重新排列到列id

  • 本文关键字:id 排列 新排列 数据帧 r
  • 更新时间 :
  • 英文 :


假设我有一个创建为的数据帧

id <- c("a","b","c","d","e","f")
a <- c(6,4,3,6,4,9)
b <- c(8,5,2,9,0,1)
df <- cbind.data.frame(id,a,b)

其输出为

id x y
1  a 6 8
2  b 4 5
3  c 3 2
4  d 6 9
5  e 4 0
6  f 9 1

这当然是我实际问题的一个较小的可复制版本。在我的实际场景中,我以以下方式从多个.xlsx文件创建了一个数据帧

files <- list.files(path = "Discharge", pattern = "*_SUMQH.xls", full.names = T)
strm_data <- sapply(files, read_xlsx, simplify=FALSE) %>% 
bind_rows(.id = "id")
strm_data <- as.data.frame(strm_data[,-(7:19)])
strm_data <- na.omit(strm_data)
row.names(strm_data) <- NULL

我想要的是以以下方式排列数据帧

id x y  id x y id x y id x y  id x y id x y
1 a  6 8  b  4 5  c 3 2 d  6 9  e  4 0  f 9 1

使用cbind+split尝试下面的基本R代码

> do.call(cbind, unname(split(df, 1:nrow(df))))
id a b id a b id a b id a b id a b id a b
1  a 6 8  b 4 5  c 3 2  d 6 9  e 4 0  f 9 1

这里是真正的基本解决方案:

cbind(df[1,], df[2,], df[3,], df[4,], df[5,], df[6,])

输出:

id x y id x y id x y id x y id x y id x y
1  a 6 8  b 4 5  c 3 2  d 6 9  e 4 0  f 9 1

最新更新