% reshape2::melt(id.vars=c("id", "v1")) %>% s-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:04:06 25 4
gpt4 key购买 nike

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

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

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

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

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

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

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

谢谢

最佳答案

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

关于r - 通过使用 dplyr 添加包含序列号的变量来扩展(爆炸?) data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55261766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com