数据框列:删除引号,更改小数位数并转换为数字

时间:2019-08-29 15:58:01

标签: r

我有一个字符数据框列,需要将其调整为数字。

我尝试了substr,然后转换为数字,但是substr命令无法识别引号。我也尝试过gsub,但是它确实可以识别字符的长度,并且引号保持不变。

字符列包含小数逗号和引号,如下所示:

test <- as.data.frame(c("\"2,60\"", "\"1,30\"", "\"850,00\"", "\"1000,00\"", "\"57,25\"",  "\"98,00\""))
colnames(test) <- "v1" 

我想将列更改为带有小数点的数字,如下所示:

test.num <- as.data.frame(c(2.60, 1.30, 850.00, 1000.00, 57.25, 98.00))
colnames(test.num) <- "v1"

我希望有人能提供一些指导。

4 个答案:

答案 0 :(得分:5)

使用chartr()

as.numeric(chartr('",', ' .', test$v1))
# [1]    2.60    1.30  850.00 1000.00   57.25   98.00

答案 1 :(得分:4)

这是使用阅读器

中的功能的一个选项
readr::parse_number(as.character(test$v1),locale = locale(decimal_mark = ","))

答案 2 :(得分:3)

使用基数R中的gsub,您可以将所有[[:punct:]]运算都替换为空,然后将结果除以100(假定,之后总是两位)。

as.numeric(gsub("\\D", "", test$v1)) / 100
# [1]    2.60    1.30  850.00 1000.00   57.25   98.00

如果假设不成立,则可以将","替换为"."

as.numeric(gsub(",", ".", gsub("\"", "", test2$v1)))
# [1]    2.60    1.30  850.00 1000.00   57.25   98.00

数据

test <- structure(list(v1 = structure(c(3L, 1L, 5L, 2L, 4L, 6L), .Label = c("\"1,30\"", 
"\"1000,00\"", "\"2,60\"", "\"57,25\"", "\"850,00\"", "\"98,00\""
), class = "factor")), row.names = c(NA, -6L), class = "data.frame")

test2 <- structure(list(v1 = structure(c(3L, 1L, 5L, 2L, 4L, 6L), .Label = c("\"1,3\"", 
"\"1000,0\"", "\"2,60\"", "\"57,25\"", "\"850,00\"", "\"98,00\""
), class = "factor")), row.names = c(NA, -6L), class = "data.frame")

答案 3 :(得分:2)

使用,作为十进制运算符读回数据:

read.table(text = as.character(test$v1), dec=',')

       V1
1    2.60
2    1.30
3  850.00
4 1000.00
5   57.25
6   98.00