将计数数据框转换为R中单个观测值的行

时间:2019-07-08 18:49:32

标签: r

我有一个包含每个组织的观察计数的数据集,我需要将其转换为每个观察的单独行。我与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
# ...

我已经碰到了这堵墙,因此,请向正确的方向提供帮助/指点。

1 个答案:

答案 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