在 R 中将许多变量从长变量转换为宽变量

Converting many variables from long to wide in R

我希望在 R 中将许多变量从长变量转换为宽变量。我将数据与家庭作为一个集群,并且在每个家庭个体中。对于每个个体的几个测量变量,每个测量不止一次。在下面的示例中,您可以看到两个变量 x 和 y,每个变量测量两次。

我知道如何使用 reshape2 包和 dcast 函数对一个变量执行此操作,但它不适用于多个变量。

我附上了示例数据的图片和生成它的代码。

family = c(1,1,1,2,2,2,3,3,3,1,1,1,2,2,2,3,3,3)
id = c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3)
time = c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
x = round(runif(18,1,10))
y = round(runif(18,1,10))

D = data.frame(family, id, time, x, y)

输出应该是一个包含以下变量的数据框:family, id, x_1, x_2, y_1, y_2.

编辑:

你可以在这里看到一个例子:

谢谢!

您可以为每个 familyidtime 变量创建一个唯一标识符行,然后使用 pivot_wider.

library(dplyr)

D %>% 
   group_by(family, id, time) %>% 
   mutate(row = row_number()) %>% 
   tidyr::pivot_wider(names_from = time, values_from = c(x, y))