我有一个字符数据框列,需要将其调整为数字。
我尝试了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"
我希望有人能提供一些指导。
答案 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