通过使用 dplyr 添加包含序列号的变量来扩展(爆炸?) data.frame

Bas*_*ien 4 r dplyr

我有简单的数据框,可以说:

dd <- data.frame(id = letters[1:4], v1 = c(0.3,0.1,0.7,1.3))
dd
  id  v1
1  a 0.3
2  b 0.1
3  c 0.7
4  d 1.3
Run Code Online (Sandbox Code Playgroud)

对于该数据帧的每一行,我想通过添加一个给出数字序列的新变量来“分解”它。我成功地做到了这一点,但我的代码并不理想,而且很难消耗:

dd %>% 
  mutate("0"=0,"5"=5,"10"=10) %>% 
  reshape2::melt(id.vars=c("id", "v1")) %>% 
  select(-variable) 
   id  v1 value
1   a 0.3     0
2   b 0.1     0
3   c 0.7     0
4   d 1.3     0
5   a 0.3     5
6   b 0.1     5
7   c 0.7     5
8   d 1.3     5
9   a 0.3    10
10  b 0.1    10
11  c 0.7    10
12  d 1.3    10
Run Code Online (Sandbox Code Playgroud)

因此,在这个示例中,对于每一行,我添加一个名为的列value,其中包含所有三个值c(0,5,10)

这段代码并不理想,因为我想要的实际序列非常多1:70,而且我不想mutate手动写入所有 70 个新变量。肯定有更好的方法,你能帮我吗?

我不必呆在家里dplyr,但我希望能够通过管道传输我的代码。

谢谢

Gre*_*gor 6

library(tidyr)
dd %>% crossing(value = c(0, 5, 10))
   id  v1 value
1   a 0.3     0
2   a 0.3     5
3   a 0.3    10
4   b 0.1     0
5   b 0.1     5
6   b 0.1    10
7   c 0.7     0
8   c 0.7     5
9   c 0.7    10
10  d 1.3     0
11  d 1.3     5
12  d 1.3    10
Run Code Online (Sandbox Code Playgroud)