【问题标题】:Replacing numbers within a range with a factor [duplicate]用因子替换范围内的数字[重复]
【发布时间】:2012-04-19 06:08:22
【问题描述】:

给定一个数据框列,它是一系列整数(年龄),我想将整数范围转换为序数变量。

我当前的代码不起作用,我该怎么做?

df <- read.table("http://dl.dropbox.com/u/822467/df.csv", header = TRUE, sep = ",")

df[(df >= 0)  & (df <= 14)] <- "Age1"
df[(df >= 15) & (df <= 44)] <- "Age2"
df[(df >= 45) & (df <= 64)] <- "Age3"
df[(df > 64)] <- "Age4"

table(df)

【问题讨论】:

    标签: r data-processing r-factor


    【解决方案1】:

    使用cut 一步完成:

    dfc <- cut(df$x, breaks=c(0, 15, 45, 56, Inf))
    str(dfc)
     Factor w/ 4 levels "(0,15]","(15,45]",..: 3 4 3 2 2 4 2 2 4 4 ...
    

    一旦您对正确指定 breaks 感到满意,您还可以使用 labels 参数重新标记级别:

    dfc <- cut(df$x, breaks=c(0, 15, 45, 56, Inf), labels=paste("Age", 1:4, sep=""))
    str(dfc)
     Factor w/ 4 levels "Age1","Age2",..: 3 4 3 2 2 4 2 2 4 4 ...
    

    【讨论】:

    • 谢谢,它有效。你知道我最初想做的事情有什么问题吗?
    • @RJ -- 试试这个(然后比较代码的第 5 行)看看出了什么问题:c(65, 99, 100, 104, "Age3", "Age2") &gt; 64
    • 要获得有序因子(在OP中提到),请在cut()中包含ordered_result = TRUE
    • @Josh O'Brien 我明白了,我现在明白了。整数和字母数字位于一个连续统一体上。 1 - 10,A - Z
    • @RJ- 是的,就是这样。而且由于即使是整数也被转换为字符串,所以它们按字典顺序(而不是按大小)排序。例如sort(c(1:12, 100, letters[1:5]))
    猜你喜欢
    • 1970-01-01
    • 2012-09-23
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多