将长格式数据重塑为一行宽格式数据
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
我正在尝试将一些数据从长格式重塑为单行宽格式,下面是我的数据目前的样子;
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