【问题标题】:Get categories from numeric vector从数值向量中获取类别
【发布时间】:2015-03-16 04:17:55
【问题描述】:

我有这个数字向量:

vec <- 1:7

如何使用这些逻辑规则将其转换为 3 类:

if(vec >= 1 && vec < 4) then "category1"

else if(vec >=4 && vec < 6) then "category2"

else if(vec >= 6 && vec < 8) then "category3"

预期的结果是:

result <- c("category1","category1","category1",
            "category2","category2",
            "category3","category3")

更新:

如果类别名称不是连续的(即 cat1、cat2、cat3)怎么办?例如

if(vec >= 1 && vec < 4) then "night"

else if(vec >=4 && vec < 6) then "early morning"

else if(vec >= 6 && vec < 8) then "morning"

【问题讨论】:

  • 请注意 &amp;&amp; 返回单个逻辑元素 - 请参阅 ?'&amp;&amp;'

标签: r categories numeric


【解决方案1】:

我推荐cut 及其labels 变量

cut(vec, c(1, 3, 5, 8), include.lowest = TRUE, labels = paste0("category", 1:3))
# [1] category1 category1 category1 category2 category2 category3 category3
# Levels: category1 category2 category3

【讨论】:

  • 谢谢。如果类别不是随之而来的,即不是 1:3 怎么办?应该如何更改此代码以处理“冬季”、“夏季”等类别?
  • 对不起,我没有关注,你有更具体的例子吗?
  • 可能只是cut(vec, c(1, 3, 5, 8), include.lowest = TRUE, labels = c("night", "early morning", "morning"))
【解决方案2】:
#a. `ifelse` approach

result<-ifelse(vec >= 1 & vec < 4,"category1",ifelse(vec >=4 & vec < 6,"category2","category3"))
[1] "category1" "category1" "category1" "category2" "category2" "category3" "category3"

#b. `Recode` from car package

library(car)
result<- Recode(vec,"1:3='category1';4:6='category2';else='category3'")
[1] "category1" "category1" "category1" "category2" "category2" "category2" "category3"

【讨论】:

    猜你喜欢
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多