R 消除影响较小的因素

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 #

一列中有数百个级别,但并非所有级别都能真正增加价值-如中所示,约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

#   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-理解这个问题当然有认知负荷:)