首页 > 解决方案 > 根据数字的长度和数字的部分将数据分类

问题描述

我有以下数据框。

用户 标识
用户 1 45668
用户 2 68445
用户 3 75006
用户 4 8000
User<- c("User1","User2","User3","User4")
Ident <- c(45668,68445,75006,8000)
df<-data.frame("User"=User,"Ident"=Ident)

我现在想要一个第三列,使用以下条件创建:

根据评论添加了信息:我将 => 更改为 ==。它不是一个范围。每两位数字都可以有一个单独的“Ident_Cat”。

用户 标识 Ident_Cat
用户 1 45668 猫 A
用户 2 68445 猫 A
用户 3 75006 猫 B
用户 4 8000 Cat_Unknown

我可以用:

c <- df %>% 
  +     filter(substr(df2$Ident, 1,2) == 45)
c$Ident_Cat<-"CatA"

rbind

但这似乎是一个讨厌的解决方法。

有任何想法吗。谢谢

标签: rdataframesortingdplyr

解决方案


所以像这样:


library(forcats)
library(dplyr)

User<- c("User1","User2","User3","User4")
Ident <- c(45668,68445,75006,8000)
df<-data.frame("User"=User,"Ident"=Ident)

df %>%
mutate(cat = as_factor(floor(Ident/1000)))%>%
mutate(cat =fct_collapse( cat,
Unknown ="8",
A = c("45","68"),
B = "75"))

或者更具可扩展性?

library(forcats)
library(dplyr)

User<- c("User1","User2","User3","User4")
Ident <- c(45668,68445,75006,8000)
df<-data.frame("User"=User,"Ident"=Ident)

U <- as.character(c(0:9))
A <- as.character(c(10:69))
B <-as.character(c(70:99))

df %>%
mutate(cat = as_factor(floor(Ident/1000)))%>%
mutate(cat =fct_collapse( cat,
Unknown = U,
A = A,
B = B))

发出警告,但这不是错误


推荐阅读