乘以 `separate_rows` 创建的每个新行

Multiply every new rows created by `separate_rows`

我正在使用 tidyr 中的 separate_rows 函数。

基本上,我想更改复制的数据的值——在下面的示例中,它会显示为:“每次创建新行时,将 z 乘以 0.5”

我已经在默认 df 中添加了一个索引。所以它可能是“每次索引 N 与 [-1] 相同时,将 z 乘以 0.5”

df <- tibble(
  x = 1:4,
  y = c("a", "b,c,d", "e,f"),
  z = 1:4
)

# A tibble: 3 x 3
      x y         z
  <int> <chr> <int>
1     1 a         1
2     2 b,c,d     2
3     3 e,f       3

我们得到的:

> separate_rows(df, y)
# A tibble: 6 x 3
      x y         z
  <int> <chr> <int>
1     1 a         1
2     2 b         2
3     2 c         2
4     2 d         2
5     3 e         3
6     3 f         3

我需要什么(新行乘以 0.5 的 z 值:

# A tibble: 6 x 3
      x y         z
  <int> <chr> <int>
1     1 a         1
2     2 b         1
3     2 c         1
4     2 d         1
5     3 e         1.5
6     3 f         1.5

如果 n > 1,您可以按 z 分组并相乘。

df %>% 
  separate_rows(y) %>% 
  group_by(z) %>% 
  mutate(z = ifelse(n() > 1, z*0.5, z))

      x y         z
  <int> <chr> <dbl>
1     1 a       1  
2     2 b       1  
3     2 c       1  
4     2 d       1  
5     3 e       1.5
6     3 f       1.5

一个选项也是将 'z' 乘以 0.5,得到 pmax 与 1 然后使用 separate_rows

library(dplyr)
library(tidyr)
df %>%
   mutate(z = pmax(1, z * 0.5)) %>% 
   separate_rows(y)

-输出

# A tibble: 6 × 3
      x y         z
  <int> <chr> <dbl>
1     1 a       1  
2     2 b       1  
3     2 c       1  
4     2 d       1  
5     3 e       1.5
6     3 f       1.5