【发布时间】:2020-05-17 21:15:29
【问题描述】:
我一直在网上寻找这个问题
与通常的发现不同的是,我的列中有数字和其他不同于普通数字的值。
比如说:
df <- data.frame('Col1' = c('421', ' 0.52', '-0.88 ', '1.2 (ref)', ' 97 '),
'Col2' = c('0.0', '0.27,0.91', '3.0', ' 10242.3', ' 94.5'))
我想从仅由数字组成的单元格中删除空格。不确定,例如0.52,那个dot 字符是否仍然被视为数字。同样在-0.88 - 字符中。
到目前为止我会使用
library(stringr)
# Remove spaces
df$Col1 <- str_replace_all(df$Col1, "\\s+", "")
library(dplyr)
# Convert to as.numeric
df %>%
mutate_all(funs(as.numeric(as.character(.)))
但我不想只替换每个空格,例如值1.2 (ref),我想保留那个空格。另外,不要将每个值都更改为 as.numeric,仅在纯数字或\d+\.\d+ 或\-\d+\.\d+(正则表达式)的情况下进行
此外,如果我尝试转换为 as.numeric,数值会以某种方式发生巨大变化,我知道这是因为值中存在空格。
提前致谢
【问题讨论】:
-
除了空格之外,还有其他字符,例如
(ref),它们不是数字 -
如果你想保留
1.2 (ref)之类的值,那么列中的所有值将被强制转换为character,无论它们看起来如何“数字” -一列只能有一个单个类。无论如何,对于一般的前导/尾随空格,请参阅read.table中的strip.white参数。 -
您的意思是说您要从
-0.88中删除空格,而不是从'1.2 (ref)'中删除空格?
标签: r dplyr number-formatting