gpt4 book ai didi

r - 在保留数据帧结构的同时合并 R 中的重复字符

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

我有一个神经网络玩具边缘列表,如下所示:

df<-c("Group1", "Group1", "Group2", "Group1, Group3", "Group1, Group3", 
"Group3", "Group3, Group4", "Group3, Group4")

V1
1 Group1
2 Group1
3 Group2
4 Group1, Group3
5 Group1, Group3
6 Group3
7 Group3, Group4
8 Group3, Group4

我需要保留数据的 8 行结构(在第 1 行和第 2 行中包含单个重复元素,如 Group1),但我想:

1) 识别以逗号分隔的重复条目的实例(即 "Group1, Group3""Group3, Group4")

2) 对于这些实例,找到一种方法来合并值,以便在第一个重复行中保留一个唯一值,在第二个重复行中保留第二个唯一值,如下所示:

    V1
1 Group1
2 Group1
3 Group2
4 Group1 <- Group3 is dropped
5 Group3 <- Group1 is dropped
6 Group3
7 Group3 <- Group4 is dropped
8 Group4 <- Group3 is dropped

所有重复项都以二的倍数出现,因此只有两个值的奇数重复没有任何问题,等等。

编辑:

为了将来引用,如果边缘列表有像这样的非连续重复项,我该怎么办:

df<-c("Group1", "Group1, Group3", "Group2", "Group1, Group3", "Group3", 
"Group3, Group4", "Group3", "Group3, Group4")
V1
1 Group1
2 Group1, Group3
3 Group2
4 Group1, Group3
5 Group3
6 Group3, Group4
7 Group3
8 Group3, Group4

所提供的解决方案无法在这种情况下发挥作用。此外,由于行的位置对于网络至关重要,因此无法对其进行排序。有什么建议吗?

最佳答案

删除重复项,然后以逗号分隔。

unlist(strsplit(df[!(ave(seq_along(df), df, FUN = seq_along) == 2 & grepl(",", df))], ", "))
#[1] "Group1" "Group1" "Group2" "Group1" "Group3" "Group3" "Group3" "Group4"

df 如果重复项有可能不在一起,则可能需要先对其进行排序。

这是使用 mapply 的另一种方法,无论 df 的顺序如何,它都应该有效

df<-c("Group1", "Group1, Group3", "Group2", "Group1, Group3", "Group3", 
"Group3, Group4", "Group3", "Group3, Group4")
d = lapply(unique(df), function(x) strsplit(x, ", ?"))
ind = match(df, unique(df))
grp = ifelse(grepl(",", df), ave(seq_along(df), df, FUN = seq_along), 1)
df2 = mapply(function(i, g) d[[i]][[1]][g], ind, grp)
data.frame(df, df2)
#> df df2
#> 1 Group1 Group1
#> 2 Group1, Group3 Group1
#> 3 Group2 Group2
#> 4 Group1, Group3 Group3
#> 5 Group3 Group3
#> 6 Group3, Group4 Group3
#> 7 Group3 Group3
#> 8 Group3, Group4 Group4

关于r - 在保留数据帧结构的同时合并 R 中的重复字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58329390/

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