我有一个包含2列的数据框:
<style name="app.theme"
parent="android:Theme.Material.Light.NoActionBar.Fullscreen">
<item name="android:dialogTheme">@style/app.dialog</item>
......
</style>
<style name="app.dialog"
parent="android:Theme.Material.Light.Dialog">
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary.dark</item>
<item name="android:colorAccent">@color/accent</item>
</style>
现在我想让 .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")
列成为我的列名,val将变为2行。
像这样:
.id
基本上.id是我的分组变量,我希望将属于1组的所有值作为一行。我期待像融化和变换一样简单。但经过多次尝试,我仍然没有成功。是否有人熟悉可以实现此目的的功能?
答案 0 :(得分:2)
您可以在基座R中使用unstack
执行此操作:
unstack(df, form=vals~.id)
A B C
1 10 20 30
2 100 200 300
第一个参数是data.frame的名称,第二个参数是确定未堆叠结构的公式。
答案 1 :(得分:2)
您也可以使用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)))