Arrays R中的二维数据到三维数据

Arrays R中的二维数据到三维数据,arrays,r,Arrays,R,我有以下数据。(个体=2,时间=3,因此1,2,3代表个体1,4,5,6代表个体2) 我想把上面的二维数组转换成三维数组,(3,8,2)数组。 所以 我希望有人能帮助我。谢谢。看到您预期的结果,我想您正在寻找一份清单。首先,您希望创建一个具有主题ID的列。然后,您可以使用split将数据框与变量拆分。如果需要单独的数据帧,可以使用list2env在全局环境中创建新的数据帧 # Create a column with subject ID mydf$ID <- rep(c(1,2), ea

我有以下数据。(个体=2,时间=3,因此1,2,3代表个体1,4,5,6代表个体2)

我想把上面的二维数组转换成三维数组,(3,8,2)数组。 所以


我希望有人能帮助我。谢谢。

看到您预期的结果,我想您正在寻找一份清单。首先,您希望创建一个具有主题ID的列。然后,您可以使用
split
将数据框与变量拆分。如果需要单独的数据帧,可以使用
list2env
在全局环境中创建新的数据帧

# Create a column with subject ID
mydf$ID <- rep(c(1,2), each = 3)

# Split your data frame by ID
split(mydf, f = mydf$ID)

#$`1`
#     Y1   Y2 X1   X2 X3       Z1       Z2       Z3 ID
#1 20.56 0.40  1 6.38  3 5.412649 9.439068 4.471056  1
#2 21.17 0.33  1 6.70  3 5.193636 8.898775 4.442006  1
#3 21.48 0.39  1 6.74  3 7.077044 9.748003 3.286804  1

#$`2`
#     Y1   Y2 X1   X2 X3       Z1       Z2       Z3 ID
#4 22.12 0.62  1 6.83  4 7.685389 10.09979 2.569721  2
#5 22.12 0.64  1 6.83  5 7.981264 10.34203 2.670692  2
#6 21.36 0.34  1 6.78  4 8.287524 10.53625 1.420523  2

# If you need to create separate data frames, use list2env.
list2env(split(mydf, f = mydf$ID), .GlobalEnv)
#创建主题ID为的列

mydf$ID看到您的预期结果,我想您正在寻找一个列表。首先,您希望创建一个具有主题ID的列。然后,您可以使用
split
将数据框与变量拆分。如果需要单独的数据帧,可以使用
list2env
在全局环境中创建新的数据帧

# Create a column with subject ID
mydf$ID <- rep(c(1,2), each = 3)

# Split your data frame by ID
split(mydf, f = mydf$ID)

#$`1`
#     Y1   Y2 X1   X2 X3       Z1       Z2       Z3 ID
#1 20.56 0.40  1 6.38  3 5.412649 9.439068 4.471056  1
#2 21.17 0.33  1 6.70  3 5.193636 8.898775 4.442006  1
#3 21.48 0.39  1 6.74  3 7.077044 9.748003 3.286804  1

#$`2`
#     Y1   Y2 X1   X2 X3       Z1       Z2       Z3 ID
#4 22.12 0.62  1 6.83  4 7.685389 10.09979 2.569721  2
#5 22.12 0.64  1 6.83  5 7.981264 10.34203 2.670692  2
#6 21.36 0.34  1 6.78  4 8.287524 10.53625 1.420523  2

# If you need to create separate data frames, use list2env.
list2env(split(mydf, f = mydf$ID), .GlobalEnv)
#创建主题ID为的列

mydf$ID如果你真的想要一个数组,因为它都是数字数据,你可以这样做

s <- split(df, rep(1:2, nrow(df)/2))
array(unlist(s), c(3, 8, 2))
# , , 1
# 
#       [,1] [,2] [,3] [,4] [,5]     [,6]      [,7]     [,8]
# [1,] 20.56 0.40    1 6.38    3 5.412649  9.439068 4.471056
# [2,] 21.48 0.39    1 6.74    3 7.077044  9.748003 3.286804
# [3,] 22.12 0.64    1 6.83    5 7.981264 10.342030 2.670692
# 
# , , 2
# 
#       [,1] [,2] [,3] [,4] [,5]     [,6]      [,7]     [,8]
# [1,] 21.17 0.33    1 6.70    3 5.193636  8.898775 4.442006
# [2,] 22.12 0.62    1 6.83    4 7.685389 10.099790 2.569721
# [3,] 21.36 0.34    1 6.78    4 8.287524 10.536250 1.420523

s如果你真的想要一个数组,因为它都是数字数据,你可以这样做

s <- split(df, rep(1:2, nrow(df)/2))
array(unlist(s), c(3, 8, 2))
# , , 1
# 
#       [,1] [,2] [,3] [,4] [,5]     [,6]      [,7]     [,8]
# [1,] 20.56 0.40    1 6.38    3 5.412649  9.439068 4.471056
# [2,] 21.48 0.39    1 6.74    3 7.077044  9.748003 3.286804
# [3,] 22.12 0.64    1 6.83    5 7.981264 10.342030 2.670692
# 
# , , 2
# 
#       [,1] [,2] [,3] [,4] [,5]     [,6]      [,7]     [,8]
# [1,] 21.17 0.33    1 6.70    3 5.193636  8.898775 4.442006
# [2,] 22.12 0.62    1 6.83    4 7.685389 10.099790 2.569721
# [3,] 21.36 0.34    1 6.78    4 8.287524 10.536250 1.420523

s有一个名为'abind'的外部包,它有一个同名函数,这使得这个过程非常简单。唯一值得尝试的部分是找出你需要告诉它你想要一个三维空间。由于它位于参数列表中省略号之后,因此必须将“沿”参数命名为:

require(abind)
arr <- abind( split( dat, rep(1:2, 3) ), along=3)
arr[, , 1] 
#----------
     Y1   Y2 X1   X2 X3       Z1        Z2       Z3
2 20.56 0.40  1 6.38  3 5.412649  9.439068 4.471056
4 21.48 0.39  1 6.74  3 7.077044  9.748003 3.286804
6 22.12 0.64  1 6.83  5 7.981264 10.342030 2.670692

arr[,,2]

     Y1   Y2 X1   X2 X3       Z1        Z2       Z3
2 21.17 0.33  1 6.70  3 5.193636  8.898775 4.442006
4 22.12 0.62  1 6.83  4 7.685389 10.099790 2.569721
6 21.36 0.34  1 6.78  4 8.287524 10.536250 1.420523
require(abind)

arr有一个名为'abind'的外部包,它有一个同名函数,这使它非常简单。唯一值得尝试的部分是找出你需要告诉它你想要一个三维空间。由于它位于参数列表中省略号之后,因此必须将“沿”参数命名为:

require(abind)
arr <- abind( split( dat, rep(1:2, 3) ), along=3)
arr[, , 1] 
#----------
     Y1   Y2 X1   X2 X3       Z1        Z2       Z3
2 20.56 0.40  1 6.38  3 5.412649  9.439068 4.471056
4 21.48 0.39  1 6.74  3 7.077044  9.748003 3.286804
6 22.12 0.64  1 6.83  5 7.981264 10.342030 2.670692

arr[,,2]

     Y1   Y2 X1   X2 X3       Z1        Z2       Z3
2 21.17 0.33  1 6.70  3 5.193636  8.898775 4.442006
4 22.12 0.62  1 6.83  4 7.685389 10.099790 2.569721
6 21.36 0.34  1 6.78  4 8.287524 10.536250 1.420523
require(abind)

啊,我不知道这个包裹。谢谢你提供的信息+1.我不知道这个包裹。谢谢你提供的信息+1.啊,对不起。这意味着是
mydf
。当我测试代码时,我倾向于使用人名。我现在改变它!啊,对不起。这意味着是
mydf
。当我测试代码时,我倾向于使用人名。我现在改变它!