首页 > 解决方案 > 如何根据其他属性降低因子水平?

问题描述

我有一个包含两列id和的数据框result,我想根据 为结果分配因子级别id。因此对于 id "1",结果c("a","b","c","d")将具有因子级别 1、2、3、4。对于 id "2",结果c("22","23","24")将具有因子级别 1、2、3。

id <- c(1,1,1,1,2,2,2)
result <- c("a","b","c","d","22","23","24")

我尝试通过拆分对它们进行分组,但是它们将被转换为列表而不是数据框,这会导致建模的长度问题。你能帮忙吗?

标签: r

解决方案


尽管用户@Ronak Shah将该问题作为重复问题关闭,但我认为这不是同一个问题。

按组对行进行编号后,必须将新列强制转换为 class "factor"

library(dplyr)

id <- c(1,1,1,1,2,2,2)
result <- c("a","b","c","d","22","23","24")

df <- data.frame(id, result)

df %>%
  group_by(id) %>%
  mutate(fac = row_number()) %>%
  ungroup() %>%
  mutate(fac = factor(fac))
# A tibble: 7 x 3
#     id result fac  
#  <dbl> <fct>  <fct>
#1     1 a      1    
#2     1 b      2    
#3     1 c      3    
#4     1 d      4    
#5     2 22     1    
#6     2 23     2    
#7     2 24     3    

编辑。

如果 中有重复的值result,则强制as.integer/factor获取数字,然后强制将这些数字作为因子。

id2 <- c(1,1,1,1,2,2,2,2)
result2 <- c("a","b","c","d","22", "22","23","24")

df2 <- data.frame(id = id2, result = result2)

df2 %>%
  group_by(id) %>%
  mutate(fac = as.integer(factor(result))) %>%
  ungroup() %>%
  mutate(fac = factor(fac))
# A tibble: 8 x 3
#     id result fac  
#  <dbl> <fct>  <fct>
#1     1 a      1    
#2     1 b      2    
#3     1 c      3    
#4     1 d      4    
#5     2 22     1    
#6     2 22     1    
#7     2 23     2    
#8     2 24     3    

推荐阅读