加载数据时,R 将字符串转换为 Factors,除非另有说明。然后,我们必须根据基础数据将 Factors 转换为字符或数字。在数值的情况下,我们首先使用 as.character() 转换为字符串,然后在整数值的情况下将结果转换为 as.integer()。
但是在使用 gsub 清理数字中的字符时,R 会自动将清理后的字符串转换为字符。
例如:
> sal <- data.frame(name = c('abc','def','ghi','pqr'),
+ Salary = c('$65,000','$102,000','$85,000','$72,000'))
> str(sal)
'data.frame': 4 obs. of 2 variables:
$ name : Factor w/ 4 levels "abc","def","ghi",..: 1 2 3 4
$ Salary: Factor w/ 4 levels "$102,000","$65,000",..: 2 1 4 3
> sal$Salary <- gsub('\\$','',sal$Salary)
> sal$Salary <- gsub(',','',sal$Salary)
> str(sal)
'data.frame': 4 obs. of 2 variables:
$ name : Factor w/ 4 levels "abc","def","ghi",..: 1 2 3 4
$ Salary: chr "65000" "102000" "85000" "72000"
>
我们可以看到在 gsub 之后“Salary”列从 Factor 变为 Character。有人能告诉我 gsub 是否也在这里执行 as.character() 操作吗?如果是这样,它不会将列转换为整数,因为所有值都是整数吗?
最佳答案
是的,gsub
执行 as.character
.如果您输入 gsub
在控制台中,您可以看到该功能
function (pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
{
if (!is.character(x))
x <- as.character(x)
.Internal(gsub(as.character(pattern), as.character(replacement),
x, ignore.case, perl, fixed, useBytes))
}
不,它不会直接转换为整数,因为它总是返回一个字符向量。来自
?gsub
sub and gsub return a character vector of the same length and with the same attributes as x (after possible coercion to character).
关于r - 为什么 gsub 会自动将 Factor 更改为 Character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58163662/