R-(Tidyverse)基于列整数将一行转换为多行

时间:2018-07-27 23:01:45

标签: r tidyverse

假设我有一个包含多个观察值的数据集。有时,一个观察实际上就是多个观察,已经被浓缩为一个观察。为了跟踪合并了多少个观测值,存在一个整数值变量。

我想做的就是逆转这一过程。

示例代码:

library(tidyverse)

# Example tibble
df_ex <- tibble(
  var1 = seq(1, 3),
  var2 = c('Some', 'Random', 'Text'),
  var3 = c(1, 3, 2)
)

上面的代码产生以下提示:

# A tibble: 3 x 3
   var1 var2    var3
  <int> <chr>  <dbl>
1     1 Some       1
2     2 Random     3
3     3 Text       2

在进行一些整洁的魔术之后,所需的小球将是:

# A tibble: 6 x 3
   var1 var2    var3
  <dbl> <chr>  <dbl>
1     1 Some       1
2     2 Random     1
3     2 Random     1
4     2 Random     1
5     3 Text       1
6     3 Text       1

1 个答案:

答案 0 :(得分:1)

tidyverse

中有多种方法可以执行此操作

1)通过'var1'进行分组(假设它是唯一的),为'var3'创建一个list列,方法是将1复制为'var3'的值,然后unnest

df_ex %>%
      group_by(var1) %>% 
      mutate(var3 = list(rep(1, var3))) %>%
      unnest   

2)使用map获取“ var3”和list

unnest
df_ex %>%
    mutate(var3 = map(var3, ~ rep(1, .x))) %>%
    unnest

3)使用base R,复制行序列以扩展数据,然后将“ var3” transform复制为1

transform(df_ex[rep(seq_len(nrow(df_ex)), df_ex$var3),], var3 = 1)