合并R中的重复字符,同时保留数据帧结构
我有一个神经网络的玩具边缘专家,看起来像这样:合并R中的重复字符,同时保留数据帧结构,r,neural-network,duplicates,R,Neural Network,Duplicates,我有一个神经网络的玩具边缘专家,看起来像这样: 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, Gr
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
所有的重复都是两个的倍数,所以只有两个值的奇数重复没有任何问题,等等
编辑:
作为将来的参考,如果edgelist有这样的非顺序副本,我该怎么办:
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
df删除重复项,然后在逗号处拆分
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
df2
#>1组1组1
#>2组1,组3组1
#>3组2组2
#>4组1,组3组3
#>5组3组3
#>6组3,组4组3
#>7组3组3
#>8组3,组4组4
使用tidyverse函数
df\u t%
dplyr::分组依据(V1)%>%
dplyr::筛选器(!(行号()==2&str\u检测(V1,“,”)))%%>%
dplyr::ungroup()
tidyr::独立的_行(V1)
#一个tible:8 x 1
V1
*
1组1
第2组1
第3组2
第4组1
5组3
第6组3
第7组3
8组4
另一个带有rowid的选项
library(data.table)
library(stringr)
data.table(V1 = df)[!(rowid(V1) == 2 & str_detect(V1, ",")),
.(V1 = unlist(strsplit(V1, ", ")))]
# V1
#1: Group1
#2: Group1
#3: Group2
#4: Group1
#5: Group3
#6: Group3
#7: Group3
#8: Group4
或者使用tidyverse
library(dplyr)
library(tidyr)
tibble(V1 = df) %>%
filter(!duplicated(case_when(str_detect(V1, ',') ~ V1,
TRUE ~ make.unique(V1)))) %>%
separate_rows(V1)
library(dplyr)
library(tidyr)
tibble(V1 = df) %>%
filter(!duplicated(case_when(str_detect(V1, ',') ~ V1,
TRUE ~ make.unique(V1)))) %>%
separate_rows(V1)