【问题标题】:removing particular character in a column in r删除 r 列中的特定字符
【发布时间】:2013-01-21 00:14:03
【问题描述】:

我有一个名为 LOAN 的表,其中包含名为 RATE 的列,其中观察值以百分比形式给出,例如 14.49% 我如何格式化该表以便编辑 rate 中的所有值并从条目中删除 % 以便我可以使用绘图功能。我尝试使用 strsplit。

strsplit(LOAN$RATE,"%")

但得到错误的非字符参数

【问题讨论】:

  • 几乎可以肯定,因为 LOAN$RATE 是一个因素。

标签: r strsplit


【解决方案1】:

在打印时看起来是字符但 R 认为不是的项目通常是因子类对象。我还猜测您不会对 strsplit 将返回的列表输出感到满意。试试:

gsub( "%", "", as.character(LOAN$RATE) n)

显示为数字的因素也可能造成混淆:

> factor("14.9%")
[1] 14.9%
Levels: 14.9%
> as.character(factor("14.9%"))
[1] "14.9%"
> gsub("%", "", as.character(factor("14.9%")) )
[1] "14.9"

这尤其令人困惑,因为 print.data.frame 删除了引号:

> data.frame(z=factor("14.9%"), zz=factor(14.9))
      z   zz
1 14.9% 14.9

【讨论】:

  • 或者 gsub("%", "", paste(LOAN$RATE)) 给我们懒惰的打字员。我说懒了吗?我的意思是高效。
  • 我,贤惠?我不认为这是你要使用的词。除非你所说的“善良”是指“懒惰”和/或“讽刺”。
  • 这对我不起作用。首先,代码块中的最后一个“n”会产生意外的符号错误……然后我尝试了@JoshuaUlrich 的建议,但没有任何改变……我要修改的列是类型character。帮忙?
  • 我使用了data$fundraising_goal <- as.numeric(gsub("\\$", "", data$fundraising_goal)),但这会产生“警告:强制引入的 NA”,我不确定在哪里/为什么...
  • 另外,有没有办法一次将其应用于多个列?
【解决方案2】:

这可以使用tidyverse 包中的mutate 动词来实现。在我看来,这更具可读性。 因此,为了举例说明这一点,我创建了一个名为 LOAN 的数据集,重点关注 RATE 来模拟上述问题。

library(tidyverse)
LOAN <- data.frame("SN" = 1:4, "Age" = c(21,47,68,33), 
                   "Name" = c("John", "Dora", "Ali", "Marvin"),
                   "RATE" = c('16%', "24.5%", "27.81%", "22.11%"), 
                   stringsAsFactors = FALSE)
head(LOAN)
  SN Age   Name   RATE
1  1  21   John    16%
2  2  47   Dora  24.5%
3  3  68    Ali 27.81%
4  4  33 Marvin 22.11%

在接下来的内容中,mutate 允许更改列内容,gsub 执行所需的替换(%""),as.numeric()RATE 列转换为 numeric 值,保持数据清洗流程的可遵循性。

LOAN <- LOAN %>% mutate(RATE = as.numeric(gsub("%", "", RATE)))
head(LOAN)
  SN Age   Name  RATE
1  1  21   John 16.00
2  2  47   Dora 24.50
3  3  68    Ali 27.81
4  4  33 Marvin 22.11

【讨论】:

  • 如果 RATE 列的每个元素不是单个字符,而是与不同的字符相关联怎么办?假设 RATE 包含以下元素 16%、24.5?、27.81=、22.11:如何删除与每个元素相关的不同字符?
  • @Debjyoti 使用str_replace_all("%|=|:", "", RATE) 而不是gsub(),一切都会好起来的。请注意,要继续添加模式,您需要做的就是添加| 和旁边不需要的字符。对于一些特殊字符,例如"*, $",您需要通过添加“\”来转义每个字符。例如,“$”会变成"\$",然后添加上面的模式,看起来像str_replace_all("%|=|:|\$", "", RATE)
【解决方案3】:

试试:

LOAN$RATE <- sapply(LOAN$RATE, function(x), gsub("%", "",  x))

【讨论】:

  • 您可能应该添加一个简短的说明来说明您的代码是如何工作的。
  • 您需要删除 function(x) 之后的逗号才能使其正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
  • 2023-02-01
  • 2017-12-20
  • 2021-10-05
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多