r - 如何根据其他属性降低因子水平?
问题描述
我有一个包含两列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")
我尝试通过拆分对它们进行分组,但是它们将被转换为列表而不是数据框,这会导致建模的长度问题。你能帮忙吗?
解决方案
尽管用户@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
推荐阅读
- c# - C# MongoDB 计数与查找或匹配
- java - 如何使用分页计算聚合结果 mongo db java 中的总元素?
- javascript - Asp.net 使用 Ajax 上传多个文件
- awk - 删除数据直到字段中的某个字符
- python - 从 Pyspark 列中提取时间字段与从 Pandas 日期时间列中提取时间字段
- python-3.x - 未执行 try-except 结构的递归函数中的返回语句/返回 NoneType
- java - Swing - 如何修改 JButton 的边框颜色?
- excel - 使用 SAS 确定 Excel 文件工作表名称的快速方法?
- python - 使用正则表达式取出文件中获得 Bs 的学生
- python-3.x - Changing order of execution in python