R 消除影响较小的因素
一列中有数百个级别,但并非所有级别都能真正增加价值-如中所示,约60%的级别占以下是一个简单的过程,它可以找出占数据集(行)不到80%的值,并使用新值将它们分组在一起。此过程使用字符列而不是因子列R 消除影响较小的因素,r,data-science,R,Data Science,一列中有数百个级别,但并非所有级别都能真正增加价值-如中所示,约60%的级别占以下是一个简单的过程,它可以找出占数据集(行)不到80%的值,并使用新值将它们分组在一起。此过程使用字符列而不是因子列 library(dplyr) # example dataset dt = data.frame(type = c("A","A","A","B","B","B","c","D"), value = 1:8, stringsAsFactors = F) dt #
library(dplyr)
# example dataset
dt = data.frame(type = c("A","A","A","B","B","B","c","D"),
value = 1:8, stringsAsFactors = F)
dt
# type value
# 1 A 1
# 2 A 2
# 3 A 3
# 4 B 4
# 5 B 5
# 6 B 6
# 7 c 7
# 8 D 8
# count number of rows for each type
dt %>% count(type)
# # A tibble: 4 x 2
# type n
# <chr> <int>
# 1 A 3
# 2 B 3
# 3 c 1
# 4 D 1
# add cumulative percentages
dt %>%
count(type) %>%
mutate(Prc = n/sum(n),
CumPrc = cumsum(Prc))
# # A tibble: 4 x 4
# type n Prc CumPrc
# <chr> <int> <dbl> <dbl>
# 1 A 3 0.375 0.375
# 2 B 3 0.375 0.750
# 3 c 1 0.125 0.875
# 4 D 1 0.125 1.000
# pick the types you want to group together
dt %>%
count(type) %>%
mutate(Prc = n/sum(n),
CumPrc = cumsum(Prc)) %>%
filter(CumPrc > 0.80) %>%
pull(type) -> types_to_group
# group them
dt %>% mutate(type_upd = ifelse(type %in% types_to_group, "Rest", type))
# type value type_upd
# 1 A 1 A
# 2 A 2 A
# 3 A 3 A
# 4 B 4 B
# 5 B 5 B
# 6 B 6 B
# 7 c 7 Rest
# 8 D 8 Rest
库(dplyr)
#示例数据集
dt=数据帧(类型=c(“A”、“A”、“A”、“B”、“B”、“c”、“D”),
值=1:8,系数=F)
dt
#类型值
#1 A 1
#2 A 2
#3 A 3
#4 B 4
#5 B 5
#6 B 6
#7 c 7
#8 D 8
#计算每种类型的行数
dt%>%计数(类型)
##tibble:4 x 2
#n型
#
#1 A 3
#2 B 3
#3 c 1
#4d1
#加上累计百分比
dt%>%
计数(类型)%%>%
突变(Prc=n/和(n),
CumPrc=cumsum(Prc))
##tibble:4 x 4
#类型n Prc CUMPC
#
#1 A 3 0.375 0.375
#2 B 3 0.375 0.750
#3 c 1 0.125 0.875
#4 D 10.125 1.000
#选择要组合在一起的类型
dt%>%
计数(类型)%%>%
突变(Prc=n/和(n),
CumPrc=cumsum(Prc))%>%
过滤器(CumPrc>0.80)%>%
拉动(类型)->类型到组
#分组
dt%>%突变(类型upd=ifelse(类型%in%types\u to\u组,“Rest”,类型))
#类型值类型\ upd
#1 A 1 A
#2 A 2 A
#三甲三甲
#4b 4b
#5b 5b
#6b 6b
#7 c 7休息
#8天8休息
可以投反对票-请您添加一些评论以便进行修改,好吗?谢谢。你说贡献是什么意思?你使用统计测试吗?哪一个?你能给出一个可复制的例子吗?首先,你需要找到一个合理的方法来发现/指定你想要排除的级别。您可以根据统计测试或受欢迎程度(每个级别只有很少的行)来完成这项工作。然后,您应该考虑是要删除它们(也要删除整行)还是将它们重新编码到另一个级别(例如“rest”)。谢谢AntoniosK-理解这个问题当然有认知负荷:)