r - 为什么 gsub 会自动将 Factor 更改为 Character

标签 r gsub

加载数据时,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/

相关文章:

ruby-on-rails - 为什么 String#gsub 的内容加倍?

r - 我应该在哪里设置 R 中的变量 PATH?

R 中的阈值舍入数字

r - 匹配和替换文本向量中的多个字符串,而不在 R 中循环

删除R中的大括号

替换字符串中的特定字符

r - 如何在 R 或 gnuplot 中应用功率拟合趋势线?

r - 如何使用 rmarkdown 创建自包含的 html 报告?

r - 基于 R 中的两个阈值向量操作矩阵

ruby-on-rails - 订阅!干净的字符串,去掉撇号