从数字元素中删除不需要的 0 - R
Remove Unwanted 0's from numeric element - R
新的 R-bie,
我正在尝试从我的数据框中清除 3 列数据 df
。这些列由数值元素组成,其值范围为 0.19、687.00、49405、107.440、13764.000、1.740。为了这个例子,我将在下面创建 df
。目标是将这行代码实现到 dplyr 的 mutate 函数中,因此从 data.frame
.
中清除一列数据
示例:
df <- c(1.560, 1.790, 3456.000, 1.0700, 0.16000, 1.347, 4.200)
我一直在尝试删除元素末尾的 0,使它们看起来都像这样
df <- c(1.56, 1.79, 3456, 1.07, 0.16, 1.347, 4.20)
我可以通过 运行 下面的代码行部分实现我想要的结果:
signif(df[1], 5)
signif(df[2], 5)
signif(df[3], 5)
signif(df[4], 5)
signif(df[5], 5)
signif(df[6], 5)
signif(df[7], 5)
使用 df[7] 元素 4.200
返回 4.2
尽管我必须一个接一个地执行此操作,否则如果我这样做:signif(df[1:6], 5)
,我会返回此向量 1.560 1.790 3456.000 1.070 0.160 1.347 4.200
- 我也曾尝试使用正则表达式提取对象末尾 0 的模式,但我使用的任何量词或表达式似乎都删除了所有尾随零。
我正在考虑删除最后一位数字,如果它是 0,以保留
1.347
之类的数字,但清理列的其余部分,然后删除 ".00"
的完全匹配以获得一个整体留下 3456
和 '4.20' 的整数。
当使用 "(\.000)$"
匹配并从中移除 0(例如 4128.000, 13764.000
)时,其他元素也会移除它们的 0(例如 4.2
、0.9
)而不是保留 4.200
和 0.900
,我想从中提取 4.20
和 0.90
。
使用 "(0)$"
也不起作用,我已经尝试了大量的正则表达式变体来实现这一点......任何 ehlp 将不胜感激。
的确,尾随“000”随着 sub
或 gsub
使用该模式而消失,但不是因为模式匹配任何字符。而是完全是因为初始转换为“字符” class:
> df <- c(1.560, 1.790, 3456.000, 1.0700, 0.16000, 1.347, 4.200)
>
> sub("\.000","",df)
[1] "1.56" "1.79" "3456" "1.07" "0.16" "1.347" "4.2"
> as.character(df) #no `sub(` at all
[1] "1.56" "1.79" "3456" "1.07" "0.16" "1.347" "4.2"
如果你想要小数点右边的 2 位数字,你可以这样做:
format(as.vector(df), digits=2)
[1] " 1.56" " 1.79" "3456.00" " 1.07" " 0.16" " 1.35" " 4.20"
并使用 print
去掉引号(尽管它们仍然是字符值,因此您不能对该结果使用算术运算符。:
print(format(as.vector(df), digits=2) , quote=FALSE)
[1] 1.56 1.79 3456.00 1.07 0.16 1.35 4.20
新的 R-bie,
我正在尝试从我的数据框中清除 3 列数据 df
。这些列由数值元素组成,其值范围为 0.19、687.00、49405、107.440、13764.000、1.740。为了这个例子,我将在下面创建 df
。目标是将这行代码实现到 dplyr 的 mutate 函数中,因此从 data.frame
.
示例:
df <- c(1.560, 1.790, 3456.000, 1.0700, 0.16000, 1.347, 4.200)
我一直在尝试删除元素末尾的 0,使它们看起来都像这样
df <- c(1.56, 1.79, 3456, 1.07, 0.16, 1.347, 4.20)
我可以通过 运行 下面的代码行部分实现我想要的结果:
signif(df[1], 5)
signif(df[2], 5)
signif(df[3], 5)
signif(df[4], 5)
signif(df[5], 5)
signif(df[6], 5)
signif(df[7], 5)
使用 df[7] 元素 4.200
返回 4.2
尽管我必须一个接一个地执行此操作,否则如果我这样做:signif(df[1:6], 5)
,我会返回此向量 1.560 1.790 3456.000 1.070 0.160 1.347 4.200
- 我也曾尝试使用正则表达式提取对象末尾 0 的模式,但我使用的任何量词或表达式似乎都删除了所有尾随零。
我正在考虑删除最后一位数字,如果它是 0,以保留
1.347
之类的数字,但清理列的其余部分,然后删除".00"
的完全匹配以获得一个整体留下3456
和 '4.20' 的整数。 当使用"(\.000)$"
匹配并从中移除 0(例如4128.000, 13764.000
)时,其他元素也会移除它们的 0(例如4.2
、0.9
)而不是保留4.200
和0.900
,我想从中提取4.20
和0.90
。 使用"(0)$"
也不起作用,我已经尝试了大量的正则表达式变体来实现这一点......任何 ehlp 将不胜感激。
的确,尾随“000”随着 sub
或 gsub
使用该模式而消失,但不是因为模式匹配任何字符。而是完全是因为初始转换为“字符” class:
> df <- c(1.560, 1.790, 3456.000, 1.0700, 0.16000, 1.347, 4.200)
>
> sub("\.000","",df)
[1] "1.56" "1.79" "3456" "1.07" "0.16" "1.347" "4.2"
> as.character(df) #no `sub(` at all
[1] "1.56" "1.79" "3456" "1.07" "0.16" "1.347" "4.2"
如果你想要小数点右边的 2 位数字,你可以这样做:
format(as.vector(df), digits=2)
[1] " 1.56" " 1.79" "3456.00" " 1.07" " 0.16" " 1.35" " 4.20"
并使用 print
去掉引号(尽管它们仍然是字符值,因此您不能对该结果使用算术运算符。:
print(format(as.vector(df), digits=2) , quote=FALSE)
[1] 1.56 1.79 3456.00 1.07 0.16 1.35 4.20