问题;分隔文件,负号错位,字符到数字转换强制

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