问题;分隔文件,负号错位,字符到数字转换强制
Issue with ; separated file, negative sign is misplaced, character to numeric conversion coercion
我想将所有错位的 -ve 符号数据转换为前缀 - 符号并将数据转换为数字。
我有一个数据框,例如所有这些数据都是从 ;分隔文件,分隔错误。我需要清理这些数据并将其转换为数字 class,其中 4-、1-、8- 变为 -4、-1、-8 并被视为 -ve 数字。
我的数据框是这样的:
data.frame(a=c("1","1-","2","4-"),b= c("2","3-","4","5"),c=c("3-","6-","3","8"),d=c("5","9","9-","6"))
这需要为数字 0-9
创建 sub
regex-pattern 或小数点后跟字符 class 中的负号,重复次数任意,并且在传递给 as.numeric 之前用前面的减号替换减号。这没有安全测试。如果您还没有删除之前只有一张数据图片的问题,那么您现在应该返回并删除它。
df1 <- data.frame(a=c("1","1-","2","4-"),
b= c("2","3-","4","5"),
c=c("3-","6-","3","8"),
d=c("5","9","9-","6"))
lapply(df1, function(col) as.numeric( sub("([0-9.]+)[-]", "-\1", col) ) )
#---- result looks OK ---
$a
[1] 1 -1 2 -4
$b
[1] 2 -3 4 5
$c
[1] -3 -6 3 8
$d
[1] 5 9 -9 6
# --- now replace the original df1 structure with those values ---
df1[] <- lapply(df1, function(col) as.numeric( sub("([0-9.]+)[-]", "-\1", col) ) )
#---- check for success----
> str(df1)
'data.frame': 4 obs. of 4 variables:
$ a: num 1 -1 2 -4
$ b: num 2 -3 4 5
$ c: num -3 -6 3 8
$ d: num 5 9 -9 6
切换 2 个捕获组(数字和负号),其中 df
是您的 data.frame,然后转换为数字:
sapply(df,function(x){ as.numeric(sub("([0-9.]*)(-)$","\2\1",x)) })
我想将所有错位的 -ve 符号数据转换为前缀 - 符号并将数据转换为数字。
我有一个数据框,例如所有这些数据都是从 ;分隔文件,分隔错误。我需要清理这些数据并将其转换为数字 class,其中 4-、1-、8- 变为 -4、-1、-8 并被视为 -ve 数字。
我的数据框是这样的:
data.frame(a=c("1","1-","2","4-"),b= c("2","3-","4","5"),c=c("3-","6-","3","8"),d=c("5","9","9-","6"))
这需要为数字 0-9
创建 sub
regex-pattern 或小数点后跟字符 class 中的负号,重复次数任意,并且在传递给 as.numeric 之前用前面的减号替换减号。这没有安全测试。如果您还没有删除之前只有一张数据图片的问题,那么您现在应该返回并删除它。
df1 <- data.frame(a=c("1","1-","2","4-"),
b= c("2","3-","4","5"),
c=c("3-","6-","3","8"),
d=c("5","9","9-","6"))
lapply(df1, function(col) as.numeric( sub("([0-9.]+)[-]", "-\1", col) ) )
#---- result looks OK ---
$a
[1] 1 -1 2 -4
$b
[1] 2 -3 4 5
$c
[1] -3 -6 3 8
$d
[1] 5 9 -9 6
# --- now replace the original df1 structure with those values ---
df1[] <- lapply(df1, function(col) as.numeric( sub("([0-9.]+)[-]", "-\1", col) ) )
#---- check for success----
> str(df1)
'data.frame': 4 obs. of 4 variables:
$ a: num 1 -1 2 -4
$ b: num 2 -3 4 5
$ c: num -3 -6 3 8
$ d: num 5 9 -9 6
切换 2 个捕获组(数字和负号),其中 df
是您的 data.frame,然后转换为数字:
sapply(df,function(x){ as.numeric(sub("([0-9.]*)(-)$","\2\1",x)) })