将长格式数据重塑为一行宽格式数据

Reshape long format data to one line wide format data

我正在尝试将一些数据从长格式重塑为单行宽格式,下面是我的数据目前的样子;

id var1 var2 var3
1     a    b    c
2     d    e    f
3     g    h    i

下面是我希望我的数据最后的样子;

id.1 var1.1 var2.1 var3.1 id.2 var1.2 var2.2 var3.2 id.3 var1.3 var2.3 var3.3
1         a      b      c    2      d      e      f    3      g      h      i

我尝试过使用 tidyr 包和 reshape,但似乎都无法实现我想做的事情。任何帮助将不胜感激。

如果对维护列类型感兴趣,您可以尝试do.call(cbind, split(mydf, 1:nrow(mydf)))

示例:

mydf <- structure(list(id = 1:3, var1 = structure(1:3, .Label = c("a",      
         "d", "g"), class = "factor"), var2 = c("b", "e", "h"), var3 = c("c",    
         "f", "i")), .Names = c("id", "var1", "var2", "var3"), row.names = c(NA, 
         3L), class = "data.frame")  

^^ 这就像你的数据,但 "var1" 列是一个因素。

do.call(cbind, split(mydf, 1:nrow(mydf)))
#   1.id 1.var1 1.var2 1.var3 2.id 2.var1 2.var2 2.var3 3.id 3.var1 3.var2 3.var3
# 1    1      a      b      c    2      d      e      f    3      g      h      i

str(.Last.value)
# 'data.frame': 1 obs. of  12 variables:
#  $ 1.id  : int 1
#  $ 1.var1: Factor w/ 3 levels "a","d","g": 1
#  $ 1.var2: chr "b"
#  $ 1.var3: chr "c"
#  $ 2.id  : int 2
#  $ 2.var1: Factor w/ 3 levels "a","d","g": 2
#  $ 2.var2: chr "e"
#  $ 2.var3: chr "f"
#  $ 3.id  : int 3
#  $ 3.var1: Factor w/ 3 levels "a","d","g": 3
#  $ 3.var2: chr "h"
#  $ 3.var3: chr "i"

^^ 请注意,第 类 列被保留。

稍加 gsub 就可以使列名符合您的预期。


或者,您可以添加另外两列,一列填充值“1”,另一列填充从 1 到数据集中行数的序列,并将其用作您的 "id"( LHS) 和 "time" (RHS) 变量与 reshape 函数,或类似 data.table 版本的 dcast 接受 value.var.[= 的多个变量18=]

reshape2 包。示例:http://seananderson.ca/2013/10/19/reshape.html