删除特定列中行内的重复元素

我有一个数据框,例如;

COL1  COL2
A,A,A 2
B     1
C,C   4
D,D,D 1
A     4
F     2
C,C   1 

我想首先删除其中的重复项COL1并获得:

COL1  COL2
A     2
B     1
C     4
D     1
A     4
F     2
C     1 

然后通过对相同的COL1 字母求和并得到:COL2

COL1  COL2
A     6
B     1
C     5
D     1
F     2

有人有想法吗?如果有帮助,这是数据框:

structure(list(COL1 = structure(c(2L, 3L, 4L, 5L, 1L, 6L, 4L), .Label = c("A", 
"A,A,A", "B", "C,C", "D,D,D", "F"), class = "factor"), COL2 = c(2, 
1, 4, 1, 4, 2, 1)), class = "data.frame", row.names = c(NA, -7L
))

回答

基本 R 选项

aggregate(
  COL2 ~ .,
  transform(
    df,
    COL1 = gsub(",.*", "", COL1)
  ),
  sum
)

  COL1 COL2
1    A    6
2    B    1
3    C    5
4    D    1
5    F    2


回答

您可以使用separate_rows逗号分隔不同行中的数据,仅保留唯一值并聚合。

library(dplyr)
library(tidyr)

df %>%
  mutate(row = row_number()) %>%
  separate_rows(COL1, sep = ',s*') %>%
  distinct(row, COL1, .keep_all = TRUE) %>%
  group_by(COL1) %>%
  summarise(COL2 = sum(COL2, na.rm = TRUE))

#  COL1   COL2
#  <chr> <dbl>
#1 A         6
#2 B         1
#3 C         5
#4 D         1
#5 F         2


回答

一个选择 trimws

library(dplyr)
df1 %>%
     group_by(COL1 = trimws(COL1, whitespace = ",.*")) %>% 
     summarise(COL2 = sum(COL2), .groups = 'drop')
# A tibble: 5 x 2
  COL1   COL2
  <chr> <dbl>
1 A         6
2 B         1
3 C         5
4 D         1
5 F         2


以上是删除特定列中行内的重复元素的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>