R-根据列的值将数据帧重新组织为多列

R-根据列的值将数据帧重新组织为多列,r,R,我需要重新组织我的dataframe intro多列(基于列“x”和“y”(忽略列“z”)的值): 像这样的东西 > library(reshape2) > dcast(dataframe, y~x, value.var = "y") y apple banana orange strawberry 1 a a <NA> <NA> <NA> 2 b b <NA> <NA>

我需要重新组织我的dataframe intro多列(基于列“x”和“y”(忽略列“z”)的值):


像这样的东西

> library(reshape2)
> dcast(dataframe, y~x, value.var = "y")
  y apple banana orange strawberry
1 a     a   <NA>   <NA>       <NA>
2 b     b   <NA>   <NA>       <NA>
3 c  <NA>   <NA>      c       <NA>
4 d     d   <NA>   <NA>       <NA>
5 e  <NA>   <NA>      e       <NA>
6 f  <NA>   <NA>      f       <NA>
7 g  <NA>      g   <NA>       <NA>
8 h  <NA>      h   <NA>       <NA>
9 i  <NA>   <NA>   <NA>          i
>库(2)
>dcast(数据帧,y~x,value.var=“y”)
苹果香蕉橙草莓
a
2b
3C
四维
5 e e
6f
7克
8小时
9 i i

您还可以创建一个简单的函数

max_val = 3 # Max number of rows your final dataframe will have
mdf = as.data.frame(matrix(nrow = max_val))[-1] # Create empty df

for (item in unique(df$x)) {
    vals = df[df$x == item, ]$y
    while (length(vals) != max_val){
        vals = c(array(vals), NA)
    }
    n = names(mdf)
    mdf = cbind(mdf, vals)
    names(mdf) <- c(n, item)
}
> library(reshape2)
> dcast(dataframe, y~x, value.var = "y")
  y apple banana orange strawberry
1 a     a   <NA>   <NA>       <NA>
2 b     b   <NA>   <NA>       <NA>
3 c  <NA>   <NA>      c       <NA>
4 d     d   <NA>   <NA>       <NA>
5 e  <NA>   <NA>      e       <NA>
6 f  <NA>   <NA>      f       <NA>
7 g  <NA>      g   <NA>       <NA>
8 h  <NA>      h   <NA>       <NA>
9 i  <NA>   <NA>   <NA>          i
max_val = 3 # Max number of rows your final dataframe will have
mdf = as.data.frame(matrix(nrow = max_val))[-1] # Create empty df

for (item in unique(df$x)) {
    vals = df[df$x == item, ]$y
    while (length(vals) != max_val){
        vals = c(array(vals), NA)
    }
    n = names(mdf)
    mdf = cbind(mdf, vals)
    names(mdf) <- c(n, item)
}
  apple orange banana strawberry
1     a      c      7          9
2     d      e      8         NA
3     b      f     NA         NA