对于每个 x1 级别,我尝试复制等于 number.class 的行数,并且我希望每行的长度类从 Lmin..cm 开始。至 Lmax..cm。每行增加 1。我想出了以下代码:
test<-A.M %>% filter(x1=="Crenimugil crenilabis")
for (i in 1:test$number.class){test<-test %>% add_row()}
for (i in 1:nrow(test)){test[i,]=test[1,]}
for (i in 1:nrow(test)){test$length.class[i]<-print(i+test$Lmin..cm.)}
test$length.class<-test$length.class-1
这基本上有效并给了我预期的结果:2
但是,这个脚本不允许我为每个物种运行它。
谢谢。
最佳答案
在这里,我们可以使用 tidyr
中的 uncount
来复制行,按“x1”进行分组并变异
“Lmin”。 .cm' 通过添加 row_number()
library(dplyr)
library(tidyr)
A.M %>%
uncount(number.class) %>%
group_by(x1) %>%
mutate(`Lmin..cm.` = `Lmin..cm.` + row_number())
如果我们需要创建从 Lmin..cm
到 Lmax..cm
的序列,那么我们可以使用 uncount
而不是map2
创建 seq
uence,然后unnest
library(purrr)
A.M %>%
mutate(new = map2(`Lmin..cm.`, `Lmax..cm`, ~ seq(.x, .y, by = 1)) %>%
unnest(c(new))
关于r - 如何在 R 中复制每个组级别的特定行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63607295/