【发布时间】:2016-01-22 11:01:02
【问题描述】:
我正在使用一个数据框 data,它的结构与下面的类似。
Gender Age Number
1 Female 55-59 years 5
2 Female 65+ years 10
3 Male 25-29 years 4
4 Male 40-44 years 3
5 Male 50-54 years 1
我正在尝试使用 tidyr 重塑数据(迄今为止未成功),以便 Number 列的每个值都在其自己的行上显示。我正在寻找的输出应该类似于以下内容:
Gender Age
1 Female 55-59 years
2 Female 55-59 years
3 Female 55-59 years
4 Female 55-59 years
5 Female 55-59 years
6 Female 65+ years
7 Female 65+ years
8 Female 65+ years
9 Female 65+ years
10 Female 65+ years
11 Female 65+ years
12 Female 65+ years
13 Female 65+ years
14 Female 65+ years
15 Female 65+ years
16 Male 25-29 years
17 Male 25-29 years
18 Male 25-29 years
19 Male 25-29 years
20 Male 40-44 years
21 Male 40-44 years
22 Male 40-44 years
23 Male 50-54 years
我尝试使用收集/传播功能的各种组合,但几乎没有成功。我相当确定这在 tidyr 中是可能的!
我知道我可以使用许多其他包/功能来实现相同的结果,但我非常渴望获得一个 tidyr 解决方案,以便我可以将它包含在更大的 dplyr/tidyr 管道中。
非常感谢任何帮助。
dat <- structure(list(Gender = structure(c(3L, 3L, 1L, 2L, 1L), .Label = c(" Male",
" Male", "Female"), class = "factor"), Age = structure(c(5L,
1L, 2L, 3L, 4L), .Label = c("65+ years", "25-29 years", "40-44 years",
"50-54 years", "55-59 years"), class = "factor"), Number = c(5L,
10L, 4L, 3L, 1L)), .Names = c("Gender", "Age", "Number"), class = "data.frame", row.names = c(NA,
-5L))
【问题讨论】:
-
为什么不直接使用
rep()?你可以轻松做到with(df, data.frame(Gender = rep(Gender, Number), Age = rep(Age, Number))) -
或者只是
library(splitstackshape) ; expandRows(df, "Number")