gpt4 book ai didi

r - 因子列上的 sum(.) 返回不正确的结果

转载 作者:行者123 更新时间:2023-12-04 23:50:34 28 4
gpt4 key购买 nike

我在这里遇到了一个奇怪的问题。我正在使用 data.table对于一项非常常规的任务,但有些事情我无法解释。我已经找到了解决问题的方法,但我认为了解这里出了什么问题对我来说仍然很重要。

此代码会将数据带入工作区:

library(XML)
library(data.table)
theurl <- "http://goo.gl/hOKW3a"
tables <- readHTMLTable(theurl)
new.Res <- data.table(tables[[2]][4:5][-(1:2),])
suppressWarnings(names(new.Res) <- c("Party","Cases"))

这里有两列, PartyCases .两者的默认类都是 factor .虽然, Cases应该是 numeric .最终,我只想要 Cases 的总和每个 Party .所以这样的事情应该有效:
new.Res[,sum(Cases), by=Party]

但这并没有给出正确的答案。我认为如果我更改 Cases 的类会起作用来自 factornumeric .所以我尝试了以下方法:
new.Res[,Cases := as.numeric(Cases)]
new.Res[,sum(Cases), by=Party]

但我得到了同样的错误答案。我意识到问题发生在更改 Cases 的类时来自 factornumeric .所以我尝试了一种不同的方法,它奏效了:

Step1:重新初始化数据:
theurl <- "http://goo.gl/hOKW3a"
tables <- readHTMLTable(theurl)
new.Res <- data.table(tables[[2]][4:5][-(1:2),])
suppressWarnings(names(new.Res) <- c("Party","Cases"))

步骤 2:使用不同的方法从 factor 更改类至 numeric :
new.Res[,Cases := strtoi(Cases)]
new.Res[,sum(Cases), by=Party]

这工作正常!但是,我不确定前两种方法有什么问题。我错过了什么?

最佳答案

factor 转换的正确方法至 numericinteger是要经过character .这是因为在内部,因子是一个整数索引(指的是 levels 向量)。当您告诉 R 将其转换为 numeric 时它只会转换底层索引,而不是尝试转换级别标签。

简答:做 Cases:=as.numeric(as.character(Cases)) .

编辑:或者 ?factor帮助页面提示as.numeric(levels(Cases))[Cases]因为更有效率。 h/t @Gsee 在评论中。

关于r - 因子列上的 sum(.) 返回不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206700/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com