转换数据框以使用第一列值作为列名

Transform a dataframe to use first column values as column names

我有一个包含 2 列的数据框:

  .id vals
1   A   10
2   B   20
3   C   30
4   A  100
5   B  200
6   C  300

dput(tst_df)
structure(list(.id = structure(c(1L, 2L, 3L, 1L, 2L, 3L), .Label = c("A", 
"B", "C"), class = "factor"), vals = c(10, 20, 30, 100, 200, 
300)), .Names = c(".id", "vals"), row.names = c(NA, -6L), class = "data.frame")

现在我想让 .id 列成为我的列名,而 vals 将变成 2 行。

像这样:

A    B    C
10   20   30
100  200  300

基本上 .id 是我的分组变量,我希望将属于 1 个组的所有值作为一行。我期待一些简单的东西,比如融化和变形。但经过多次尝试,我仍然没有成功。是否有人熟悉可以完成此操作的功能?

您可以使用 unstack:

在 base R 中执行此操作
unstack(df, form=vals~.id)
    A   B   C
1  10  20  30
2 100 200 300

第一个参数是 data.frame 的名称,第二个是确定未堆叠结构的公式。

您也可以使用tapply,

do.call(cbind, tapply(df$vals, df$.id, I))
#       A   B   C
#[1,]  10  20  30
#[2,] 100 200 300

或将其包装在数据框中,即

as.data.frame(do.call(cbind, tapply(df$vals, df$.id, I)))