【问题标题】:recode NA in factors在因子中重新编码 NA
【发布时间】:2012-11-01 11:53:21
【问题描述】:

我有一个包含多组样本点的数据框:

samplePoint<-c("1","1","1","1","2","2","2","2","3","3","3","3")
category<-c("a", "a", "a", NA, "b", "b", NA, "b", NA, "a", "a", "a")
values<-c(0.51, 0.21, 0.31, 0.22, 0.61, 0.71, 0.52, 0.32, 0.23, 0.1, 0.24, 0.33)
dat<-data.frame(samplePoint, category, values)

我需要重新编码 dat$category 中的 NA,以便稍后在此过程中使用。每个样本点只有一个类别:1 应该都是“a”,2 = “b”,3 =“a”。

我尝试使用 ifelse 函数进行聚合,打算使用匹配或查找类型函数重新编码:

codeList<-aggregate(
dat$category, by=list(dat$samplePoint),
FUN=function(x){ifelse(length(which(x=="a")) > length(which(x=="b")), "a", "b")}
)

问题 1 是,我该如何解决匹配问题? 问题 2 是我把整个事情完全复杂化了吗?

感谢您的帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    Q1:你不知道,因为, Q2:是的,大量。

    您可以做的是在您的样本点上调用factor,并使用所需的标签进行适当转换。

    category <- factor((as.numeric(samplePoint)+1)%%2,labels=letters[1:2])
    category
     [1] a a a a b b b b a a a a
    Levels: a b
    

    转换使用取模运算符 (%%) 将样本点转换为二进制输出,但点被移位以使点 1 和 3 对应于标签"a"。任何其他点都将以相同的方式编码,即 4: "b", 5: "a"。

    更新

    在评论中得到澄清后,我认为这可能会有所帮助:

    (catTable <- aggregate(category,list(samplePoint=samplePoint),function(x) unique(x[!is.na(x)])))
      samplePoint x
    1           1 a
    2           2 b
    3           3 a
    

    这为您提供了一个 data.frame,您可以使用您的原始数据merge 来获得您想要的。

    merge(dat,catTable,all.x=T)
       samplePoint category values x
    1            1        a   0.51 a
    2            1        a   0.21 a
    3            1        a   0.31 a
    4            1     <NA>   0.22 a
    5            2        b   0.61 b
    6            2        b   0.71 b
    7            2     <NA>   0.52 b
    8            2        b   0.32 b
    9            3     <NA>   0.23 a
    10           3        a   0.10 a
    11           3        a   0.24 a
    12           3        a   0.33 a
    

    【讨论】:

    • James,这太棒了——我以前从未见过模数用于这种效果。遗憾的是,我不能确定 dat$category 在我的整个数据集中都遵循这种模式。样本点 4 可能是 a's
    • 是的 - 你已经做到了 - 非常感谢你,这让我发疯了。我做了一个小改动:dat$category
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多