9

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

strsplit(LOAN$RATE,"%")

但得到错误非字符参数

4

3 回答 3

10

打印时看起来是字符但 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
于 2013-02-05T22:32:04.463 回答
5

这可以使用包中的mutate动词来实现tidyverse。在我看来,这更具可读性。因此,为了举例说明这一点,我创建了一个名为的数据集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进行所需的替换(%with ""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
于 2020-07-10T09:41:01.190 回答
0

尝试:

LOAN$RATE <- sapply(LOAN$RATE, function(x), gsub("%", "",  x))
于 2019-06-21T19:10:37.330 回答