提问人:cliu 提问时间:7/5/2023 最后编辑:cliu 更新时间:7/5/2023 访问量:74
重命名重复的列值组为另一列
Rename duplicated column values group by another column
问:
我有一个数据集,其中相同的 id 出现在不同的组中:
df <- read.table(text='id group
1 A
2 A
2 A
1 B
1 B
2 B
2 C
2 C
1 C
2 D
1 D
1 D', header=TRUE)
我想重命名列下按另一列分组的重复值。预期输出为:id
group
id group
1 A
2 A
2 A
1_2 B
1_2 B
2_2 B
2_3 C
2_3 C
1_3 C
2_4 D
1_4 D
1_4 D
我该怎么做?
答:
1赞
SamR
7/5/2023
#1
下面是使用 rleid()
为每个唯一和组合生成运行长度 id 的方法。然后,我们可以将该数字转换为现有的 ,它所在的位置。data.table
id
group
paste()
id
>1
library(data.table)
setDT(df)
df[, id_num := rleid(group), id][
,
id := fifelse(
id_num == 1,
as.character(id),
paste(id, id_num, sep = "_")
)
][, `:=`(id_num = NULL)]
print(df)
# id group
# <char> <char>
# 1: 1 A
# 2: 2 A
# 3: 2 A
# 4: 1_2 B
# 5: 1_2 B
# 6: 2_2 B
# 7: 2_3 C
# 8: 2_3 C
# 9: 1_3 C
# 10: 2_4 D
# 11: 1_4 D
# 12: 1_4 D
评论
1赞
cliu
7/5/2023
谢谢你的回答。请参阅下面的版本tidyverse
1赞
cliu
7/5/2023
#2
感谢@SamR的回答。我能够使用 Chatgpt 将他/她的代码转换为一个版本:data.table
tidyverse
df %>%
mutate(id_num = data.table::rleid(group)) %>%
mutate(id = ifelse(id_num == 1, as.character(id), paste(id, id_num, sep = "_"))) %>%
select(-id_num)
评论
0赞
Onyambu
7/5/2023
为什么需要 In Tidyverse?只需使用data.table::rleid
dplyr::consecutive_id
下一个:操作 R 到列值中的单个值
评论