Regex 循环将十进制逗号(,)转换为点(.)以更改data.frame列的类别

Regex 循环将十进制逗号(,)转换为点(.)以更改data.frame列的类别,regex,r,Regex,R,我想将十进制逗号,转换成点。 由于我没有使用read.table导入数据,因此无法从源代码对其进行更改。 实际上,我正在使用带有RODBC包的查询来导入。 而数据库(Teradata)只是以这种方式输出小数。 特别是在这种情况下,我不得不使用正则表达式修改数据。 这一点显然是要将对象转换为数字 这里有一个例子 尝试2 inx = 1:4 fc <- function(x, inx){ nm <- names(x)[inx] gsub(pattern = ",", replac

我想将十进制逗号
转换成点
。 由于我没有使用
read.table
导入数据,因此无法从源代码对其进行更改。 实际上,我正在使用带有
RODBC
包的查询来导入。 而数据库(Teradata)只是以这种方式输出小数。 特别是在这种情况下,我不得不使用正则表达式修改数据。 这一点显然是要将对象转换为数字

这里有一个例子 尝试2

inx = 1:4
fc <- function(x, inx){
  nm <- names(x)[inx]
  gsub(pattern = ",", replacement = ".", x = x[nm])
}
sapply(df, fc, c(df, inx))
inx=1:4

fc您可以使用
plyr
软件包执行此操作

df <- data.frame(x1 = c("0,1012312", "0,165749", "0,12412", "0,6248223"),
                 x2 = c("0,012312","0,5749", "0,112", "0,223"),
                 x3 = c("0,312", "0,65749", "0,2", "0,8223"),
                 x4 = c("0,2312","0,49", "0,54412", "0,623")
                 , stringsAsFactors = FALSE)

str(df)
## 'data.frame':    4 obs. of  4 variables:
##  $ x1: chr  "0,1012312" "0,165749" "0,12412" "0,6248223"
##  $ x2: chr  "0,012312" "0,5749" "0,112" "0,223"
##  $ x3: chr  "0,312" "0,65749" "0,2" "0,8223"
##  $ x4: chr  "0,2312" "0,49" "0,54412" "0,623"


require(plyr)
correct_decim <- function(x)
    as.numeric(gsub(",", ".", x, fixed = TRUE))

new_df <- colwise(correct_decim)(df)
str(new_df)
## 'data.frame':    4 obs. of  4 variables:
##  $ x1: num  0.101 0.166 0.124 0.625
##  $ x2: num  0.0123 0.5749 0.112 0.223
##  $ x3: num  0.312 0.657 0.2 0.822
##  $ x4: num  0.231 0.49 0.544 0.623

您需要分配循环的结果:

for(i in 1:4){
  df[ , i] <- as.numeric(gsub(",", ".", df[ , i]))
}
df
str(df)

尝试1
gsub
不会在适当的位置修改字符串-您需要将其分配回
df[,i]

df[,i] <- gsub(",", ".", df[ , i])
这将返回一个矩阵,因为
sapply
将尝试简化。如果不需要,请使用
lappy
并将其包装在数据帧中

data.frame(lapply(inx, fc, x = df))
或者使用匿名函数在一行中完成。数据帧基本上是列表,因此您可以像这样使用
lappy
对列进行迭代

data.frame(lapply(df, function(x) gsub(",", ".", x, fixed = TRUE)))

我不知道您可以使用
df[]将列表分配到数据帧中
for(i in 1:4){
  df[ , i] <- as.numeric(gsub(",", ".", df[ , i]))
}
df
str(df)
df[] <- lapply(df, function(x) as.numeric(gsub(",", ".", x)))
df[,i] <- gsub(",", ".", df[ , i])
inx = 1:4
fc <- function(x, inx){
  nm <- names(x)[inx]
  gsub(pattern = ",", replacement = ".", x = x[,nm])
}
sapply(inx, fc, x = df)
data.frame(lapply(inx, fc, x = df))
data.frame(lapply(df, function(x) gsub(",", ".", x, fixed = TRUE)))