gpt4 book ai didi

在 R 中使用新的 ID 列复制数据集

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

我想多次复制包含不同“ID”的数据集,并为新的唯一 ID 创建一个新列。原始数据集如下所示:

zz <- "ID  TIME
A 0.06
A 0.26
A 0.31
A 0.47
B 0.17
B 0.37
B 0.48
B 0.55
C 0.28
C 0.40
C 0.62
C 0.76"
df <- read.table(text = zz, header = TRUE)
复制数据 3 次并添加新的唯一 ID 列 (New.ID) 后的预期输出应如下所示:
ID  TIME New.ID
A 0.06 1
A 0.26 1
A 0.31 1
A 0.47 1
B 0.17 2
B 0.37 2
B 0.48 2
B 0.55 2
C 0.28 3
C 0.40 3
C 0.62 3
C 0.76 3
A 0.06 4
A 0.26 4
A 0.31 4
A 0.47 4
B 0.17 5
B 0.37 5
B 0.48 5
B 0.55 5
C 0.28 6
C 0.40 6
C 0.62 6
C 0.76 6
A 0.06 7
A 0.26 7
A 0.31 7
A 0.47 7
B 0.17 8
B 0.37 8
B 0.48 8
B 0.55 8
C 0.28 9
C 0.40 9
C 0.62 9
C 0.76 9

最佳答案

一个选项是 rep将行复制 3,然后使用 rleid当'ID'中的相邻元素不相同时,通过增加索引来创建一个新的ID列

library(data.table)
setDT(df1)[rep(seq_len(.N), 3)][, New.ID := rleid(ID)][]
# ID TIME New.ID
# 1: A 0.06 1
# 2: A 0.26 1
# 3: A 0.31 1
# 4: A 0.47 1
# 5: B 0.17 2
# 6: B 0.37 2
# 7: B 0.48 2
# 8: B 0.55 2
# 9: C 0.28 3
#10: C 0.40 3
#11: C 0.62 3
#12: C 0.76 3
#13: A 0.06 4
#14: A 0.26 4
#15: A 0.31 4
#16: A 0.47 4
#17: B 0.17 5
#18: B 0.37 5
#19: B 0.48 5
#20: B 0.55 5
#21: C 0.28 6
#22: C 0.40 6
#23: C 0.62 6
#24: C 0.76 6
#25: A 0.06 7
#26: A 0.26 7
#27: A 0.31 7
#28: A 0.47 7
#29: B 0.17 8
#30: B 0.37 8
#31: B 0.48 8
#32: B 0.55 8
#33: C 0.28 9
#34: C 0.40 9
#35: C 0.62 9
#36: C 0.76 9

或使用 dplyr
library(dplyr)
df1 %>%
slice(rep(row_number(), 3)) %>%
mutate(New.ID = rleid(ID))
数据
df1 <- structure(list(ID = c("A", "A", "A", "A", "B", "B", "B", "B", 
"C", "C", "C", "C"), TIME = c(0.06, 0.26, 0.31, 0.47, 0.17, 0.37,
0.48, 0.55, 0.28, 0.4, 0.62, 0.76)), class = "data.frame", row.names = c(NA,
-12L))

关于在 R 中使用新的 ID 列复制数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63319527/

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