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)))