我想将数据中所有错位的-ve符号转换为前缀 - 符号并将数据转换为数字。
我有一个数据框,例如所有这些数据都是从a读取的;分隔文件,分隔错误。我需要清理这些数据并将其转换为数字类,其中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 :(得分:0)
这需要为数字sub
或小数点创建0-9
正则表达式模式,然后在具有任意重复次数的字符类中使用减号,并使用前面的减号替换减号在传递给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
答案 1 :(得分:0)
切换2个捕获组(数字和负号),其中df
是您的data.frame,然后转换为数字:
sapply(df,function(x){ as.numeric(sub("([0-9.]*)(-)$","\\2\\1",x)) })