如何轻松地重塑R中的数据以按键收集值的分布

时间:2017-07-16 14:19:09

标签: r reshape tidyr

说我有这个数据框:

> df = structure(list(one = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("A", "B"),class = "factor"), two = 1:6),.Names = c("one", "two"),row.names = c(NA, -6L),class = "data.frame")

> df

  one two
1   A   1
2   A   2
3   A   3
4   B   4
5   B   5
6   B   6

想要重塑它:

A  B
1  4
2  5
3  6

您可以假设“one”列中每个唯一元素的行数相同。

我能够做到如下:

library(tidyr)
df = cbind(df,index=c(1:3,1:3))
spread(df,key = one,value= two)[,-1]

然而,这感觉有点像黑客,因为它使用数据整形函数,假设结果行是观察值,并且每行的值有一些关系。在这个解决方案中,我通过添加索引来建立这种关系,这些索引允许重塑以我想要的方式进行。然后,这需要我删除其他信息。感觉不干净。

所以我的问题是,是否有一个函数或简单的单行程,以更直接的方式完成我想要的工作?

1 个答案:

答案 0 :(得分:1)

我们可以使用unstack

unstack(df, two~one)
#  A B
#1 1 4
#2 2 5
#3 3 6