Один из вариантов, чтобы свернуть уровни factor
или character
, использует fct_collapse
library(dplyr)
library(forcats)
threshold <- 7
out <- df1 %>%
count(Col1 = fct_collapse(Col1, Other = unique(Col1[Col2 < threshold])),
wt = Col2)
out
# A tibble: 3 x 2
# Col1 n
# <fct> <int>
#1 A 25
#2 Other 8
#3 C 15
, тогда мы можем создать график * ie
library(ggplot2)
out %>%
ggplot(aes(x = "", y = n, fill = Col1)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start=0)
Обновление
Исходя из dput для OP, мы можем изменить имена столбцов на имена столбцов OP
df2 %>%
count(Haplogroup = fct_collapse(as.character(Haplogroup),
Other = unique(as.character(Haplogroup)[n < threshold])),
wt = n, name = "n1")
# A tibble: 6 x 2
# Haplogroup n1
# <fct> <int>
#1 Other 40
#2 E1b 14
#3 N1a 12
#4 R1 10
#5 R1a 15
#6 R1b 25
Или другой вариант - base R
(при условии, что столбец - character
класс), создайте логический вектор, сравнив «порог» с «Col2», назначьте элементы в «Col1», где «i1» равен TRUE, для «Other» ', затем сделайте группу sum
с aggregate
i1 <- df1$Col2 < threshold
df1$Col1[i1] <- "Other"
aggregate(Col2 ~ Col1, df1, sum)
# Col1 Col2
#1 A 25
#2 C 15
#3 Other 8
Data
df1 <- structure(list(Col1 = c("A", "B", "C", "D", "E"), Col2 = c(25L,
1L, 15L, 5L, 2L)), row.names = c(NA, -5L), class = "data.frame")