转换数据框以使用第一列值作为列名
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)))
我有一个包含 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
:
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)))