gpt4 book ai didi

R - 在保持记录顺序的同时删除重复列表

转载 作者:行者123 更新时间:2023-12-04 12:04:22 27 4
gpt4 key购买 nike

我有一系列事件的数据,想检查这些变化,所以我不太关心相同事件的重复。

这是我的:

ID  Date        Item
1 1-Jan-19 A
1 5-Jan-19 A
1 8-Jan-19 B
1 15-Jan-19 A
2 1-Jan-19 A
2 5-Jan-19 A
2 8-Jan-19 B
2 15-Jan-19 B
3 1-Jan-19 B
3 5-Jan-19 A
3 8-Jan-19 B
3 15-Jan-19 A
4 1-Jan-19 A
4 5-Jan-19 A
4 8-Jan-19 A
4 15-Jan-19 B

据此,我想要的是:

ID Sequence
1 ABA
2 AB
3 BABA
4 AB

使用 tidyverse 我能够将所有内容放入一个列表/变量中,但我无法弄清楚如何在该步骤或单个步骤中删除重复列表。为了将它放入单个变量中,我使用了 mutate、group_by 和 paste0,代码如下。

感谢任何帮助。

#create fake data
have = cbind(
c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4),
c(43466, 43470, 43473, 43480, 43466, 43470, 43473, 43480, 43466, 43470, 43473, 43480, 43466, 43470, 43473, 43480),
c("A", "A", "B", "A", "A", "A", "B", "B", "B", "A", "B", "A", "A", "A", "A", "B")
)
#add names
names(have) = c("ID", "Date", "Value")
#convert to tibble
have = as_tibble(have)

#current non-working solution
want <- have %>%
group_by(V1) %>%
mutate(Order = paste0(V3, collapse = "|"))

最佳答案

在这里,我们可以先根据第一列分组后的第三列的rleid过滤重复,然后执行粘贴/str_c

library(dplyr)
library(stringr)
library(data.table)
have %>%
group_by(V1) %>%
filter(!duplicated(rleid(V3))) %>%
summarise(Sequence = str_c(V3, collapse=""))
# A tibble: 4 x 2
# V1 Sequence
# <chr> <chr>
#1 1 ABA
#2 2 AB
#3 3 BABA
#4 4 AB

将最先显示的数据的'V1'、'V3'替换为'ID'、'Item'

df1 %>%
group_by(ID) %>%
filter(!duplicated(rleid(Item))) %>%
summarise(Sequence = str_c(Item, collapse=""))

关于R - 在保持记录顺序的同时删除重复列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59295603/

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