通过部分聚合重塑数据帧

时间:2018-11-04 14:21:53

标签: r dataframe reshape transpose

我已经阅读了几个与我的问题类似的问题,但实际上并没有回答我的难题。我有一个由2列组成的数据集:在第一列上,有x个用户名,每组重复100次(即,如果有4个用户名,则它们在名为“ user”的列下生成400行),而在第2列下,每个用户名对应的唯一字符串。我想将UNIQUE用户名从行转换为列,但保持col2中的所有值而不进行聚合。为简单起见,我在下面添加了虹膜数据集的一个小样本。本质上,我想重塑一下:

Species Petal.Width
setosa         0.2
setosa         0.2
setosa         0.4
versicolor     1.4
versicolor     1.3
versicolor     1.0

对此:

setosa  versicolor
0.2       1.4
0.2       1.3
0.4       1.0

无需手动设置数据,因为会有多个用户名,并且代码可能很冗长,难以完成。它实际上是列的替换(在上面的示例中从Species到setosa和versicolor)。有人可以让我知道是否有一种快速的方法来达到这个结果?谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以使用dplyrtidyr来转换数据帧。

library(dplyr)
library(tidyr)

dat2 <- dat %>%
  group_by(Species) %>%
  mutate(ID = 1:n()) %>%
  spread(Species, Petal.Width) %>%
  select(-ID)
dat2
# # A tibble: 3 x 2
#   setosa versicolor
#    <dbl>      <dbl>
# 1    0.2        1.4
# 2    0.2        1.3
# 3    0.4        1  

数据

dat <- read.table(text = "Species Petal.Width
setosa         0.2
                  setosa         0.2
                  setosa         0.4
                  versicolor     1.4
                  versicolor     1.3
                  versicolor     1.0",
                  header = TRUE, stringsAsFactors = FALSE)