我希望按3复制一列中的特定行。
我的数据框名为IID,只包含一列和大约700个变量,但有一小段代码如下所示:
10341
10561
10641
10912
11011
11012
111
1131
1132因此,对于每个单例(10341 10561 10641 10912 111),我需要用3来复制行。对于每个双胞胎(11011 11012和1131132),我只需要用3来复制第二个双胞胎(以字母2结尾),第一个双胞胎保持不变。
最终,我希望这些数据看起来像这样:
10341
10341
10341
10561
10561
10561
10641
10641
10641
10912
10912
10912
11011
11012
11012
11012
111
111
111
1131
1132
1132
1132任何帮助都将不胜感激!
谢谢。
发布于 2021-03-29 16:15:41
您可以创建一个group列,它为每个单值和双值提供一个唯一的数字。如果一个组是单个值,重复3次,如果是双胞胎,则重复第一个值(较小)1次,第二个值3次。
library(dplyr)
library(tidyr)
IID %>%
mutate(row = row_number()) %>%
arrange(Family_No) %>%
mutate(group = cumsum(Family_No - lag(Family_No, default = first(Family_No)) != 1)) %>%
group_by(group) %>%
mutate(n = if(n() == 1) 3 else c(1, 3)) %>%
ungroup %>%
uncount(n) %>%
arrange(row) %>%
select(-group, -row)这将返回:
# Family_No
#1 10341
#2 10341
#3 10341
#4 10561
#5 10561
#6 10561
#7 10641
#8 10641
#9 10641
#10 10912
#11 10912
#12 10912
#13 11011
#14 11012
#15 11012
#16 11012
#17 111
#18 111
#19 111
#20 1131
#21 1132
#22 1132
#23 1132data
IID <- data.frame(Family_No = c(10341, 10561, 10641, 10912, 11011, 11012, 111, 1131, 1132))https://stackoverflow.com/questions/66850410
复制相似问题