我有一个包含每个组织的观察计数的数据集,我需要将其转换为每个观察的单独行。我与melt()
关系密切,但仍然不知道如何为每个观察值获取单独的行。我的数据是这样的:
df <- data.frame(org = c("A", "B", "C"),
var1 = c(2, 3, 1),
var2 = c(4, 6, 1),
var3 = c(0, 4, 2))
# org var1 var2 var3
# 1 A 2 4 0
# 2 B 3 6 4
# 3 C 1 1 2
使用melt()
可以让我了解各种数据:
melt(df, id = "org")
# org variable value
# 1 A var1 2
# 2 B var1 3
# 3 C var1 1
# 4 A var2 4
# ...
但是我想要的输出是:
# org variable
# 1 A var1
# 2 A var1
# 3 B var1
# 4 B var1
# 5 B var1
# 6 C var1
# 7 A var2
# 8 A var2
# 9 A var2
# 10 A var2
# ...
我已经碰到了这堵墙,因此,请向正确的方向提供帮助/指点。
答案 0 :(得分:1)
library(tidyr)
library(dplyr)
df %>%
gather(var, value, -org) %>%
group_by_all %>%
expand(value = 1:value) %>%
filter(value != 0) %>%
ungroup %>%
select(-value)
#> # A tibble: 24 x 2
#> org var
#> <fct> <chr>
#> 1 A var1
#> 2 A var1
#> 3 A var2
#> 4 A var2
#> 5 A var2
#> 6 A var2
#> 7 A var3
#> 8 B var1
#> 9 B var1
#> 10 B var1
#> # ... with 14 more rows