取消堆叠数据框
Unstacking a data frame
我有一个如下所示的数据框:
d <- c("a", "b", "c", "a", "b", "c", "a", "b", "c")
par <- c("a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9")
df1 <- as.data.frame(cbind(id, par))
我希望它看起来像这样:
a <- c("a1", "a4", "a7")
b <- c("a2", "a5", "a8")
c <- c("a3", "a6", "a7")
df2 <- data.frame(rbind(a, b, c))
我已经按照下面的方式解决了这个问题,不过看起来太乱了
id <- c("a", "b", "c", "a", "b", "c", "a", "b", "c")
par <- c("a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9")
df1 <- as.data.frame(cbind(id, par))
ids <- levels(df1$id)
newdf <- list()
for ( i in 1:length(ids)){
tempdf <- df1[df1$id == ids[i],]
id <- tempdf[1,1]
parcels <- tempdf[,2]
row <- cbind(as.character(id), t(as.character(parcels)))
tempdf <- as.data.frame(row)
newdf[[i]] <- tempdf
}
df3 <- do.call(rbind.fill, newdf)
你可以用 unstack
as.data.frame(t(unstack(df1,par~id)))
# V1 V2 V3
#a a1 a4 a7
#b a2 a5 a8
#c a3 a6 a9
或在为 'id' 组创建序列列后使用 dcast
。
library(data.table)#v1.9.5
dcast(setDT(df1)[, ind:= 1:.N, id], id~ind, value.var='par')
我有一个如下所示的数据框:
d <- c("a", "b", "c", "a", "b", "c", "a", "b", "c")
par <- c("a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9")
df1 <- as.data.frame(cbind(id, par))
我希望它看起来像这样:
a <- c("a1", "a4", "a7")
b <- c("a2", "a5", "a8")
c <- c("a3", "a6", "a7")
df2 <- data.frame(rbind(a, b, c))
我已经按照下面的方式解决了这个问题,不过看起来太乱了
id <- c("a", "b", "c", "a", "b", "c", "a", "b", "c")
par <- c("a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9")
df1 <- as.data.frame(cbind(id, par))
ids <- levels(df1$id)
newdf <- list()
for ( i in 1:length(ids)){
tempdf <- df1[df1$id == ids[i],]
id <- tempdf[1,1]
parcels <- tempdf[,2]
row <- cbind(as.character(id), t(as.character(parcels)))
tempdf <- as.data.frame(row)
newdf[[i]] <- tempdf
}
df3 <- do.call(rbind.fill, newdf)
你可以用 unstack
as.data.frame(t(unstack(df1,par~id)))
# V1 V2 V3
#a a1 a4 a7
#b a2 a5 a8
#c a3 a6 a9
或在为 'id' 组创建序列列后使用 dcast
。
library(data.table)#v1.9.5
dcast(setDT(df1)[, ind:= 1:.N, id], id~ind, value.var='par')