gpt4 book ai didi

r - 有条件地用数字列中的点替换逗号

转载 作者:行者123 更新时间:2023-12-01 11:14:33 24 4
gpt4 key购买 nike

我目前正在清理一些德语数据。德国数据的格式与普通数据不同。在德语中,带两位小数的千是 1.000,00用英语是 1,000.00我想先删除 1.000,00 中的点,然后用点替换逗号,但前提是数字中同时存在逗号和点。如果数字只有一个点而没有逗号,那么我想保留点。

我试了一个普通的gsub,当然不是有条件的

tidy$obs_values<-as.character(gsub(",",".",tidy$obs_values)) 

简而言之,我需要的是:

#input
raw$obs_values<-c(1.000,00 , 8.3 , 2.900,00 , 9.2)

#output
raw$obs_values<-c(1000.00 , 8.3 , 2900.00 , 9.2)

最佳答案

我们可以使用 as.numericis.na 创建一个逻辑条件,因为转换为 numeric 会返回 NA 如果该值不是合法的数字语法。在示例中,第一个和第三个元素具有 ,,因此它被解释为 character,从而给出 NA。使用 is.na,构造一个逻辑向量,然后在子集向量上应用带有 sub 的替换逻辑。不过,它也可以用 grep 来完成

i1 <- is.na(as.numeric(str1))
str1[i1] <- sub(",", ".", sub("\\.", "", str1[i1]))
str1
#[1] "1000.00" "8.3" "2900.00" "9.2"

请注意,转换为numeric 将删除尾随的零数字

as.numeric(str1)
#[1] 1000.0 8.3 2900.0 9.2

数据

str1 <- c('1.000,00', 8.3, '2.900,00', 9.2)

关于r - 有条件地用数字列中的点替换逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54363900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com