我正在使用API获取一些不受我控制的字符数据,并从中创建一个data.frame。我希望结果变量能够尽可能自然地分类,而且操作最小。特别地,当适用时,我想要整数变量而不是数字变量。
我从XML数据中挖掘出这些数据,其中一个属性(称之为“attA”)将整数呈现为整数,即没有小数点和尾零。另一个属性(称为“attB”)更普遍和正确,但总是呈现带有一位小数的数字,即使它是统一为零。 (请注意,数据也可以是字符类型!)
我的初始方法基于“attA”并通过“type.convert()”进行处理,但现在我想使用“attB”。从阅读“type.convert()”文档中得知,当所有数据都可以表示为整数时,它并不生成整数。我是否理解错误?您有什么建议,可以在不惊天动地地处理字符数据的情况下获得我想要的结果吗?
attA <- c("1", "2")
str(type.convert(attA))
#> int [1:2] 1 2
attB <- c("1.0", "2.0")
str(type.convert(attB))
#> num [1:2] 1 2
unholy <- gsub("\\.0$", "", attB)
str(type.convert(unholy))
#> int [1:2] 1 2
type.convert()
文档中相关部分: "给定一个字符向量,它试图将其转换为逻辑、整数、数字或复数,如果失败,则将其转换为因子,除非as.is=TRUE。选择能够接受所有非缺失值的第一个类型... 包含可选空格后跟表示R整数或na.strings值的十进制常量的向量被转换为整数。"
as.integer()
替换type.convert()
呢?as.integer(attB)
效果很好。此外,可能可以使用read.table()
,并在那里指定colClasses
。 - Rich Scriventype.convert(..., as.is = FALSE)
)。这就是为什么我不能使用as.integer()
的原因。 - jennybryan