删除特定列中行内的重复元素
我有一个数据框,例如;
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