r - 删除数字中的前导零*在数据框内*
问题描述
编辑:对于以后来的人:这不是重复的,因为它明确涉及数据帧的工作,而不是单个变量/向量。
我发现几个网站描述了如何删除数字或字符串中的前导零,包括向量。但我发现的任何描述似乎都不适用于数据框。
或者包f_num
中的函数numform
。它处理“[a] 数字向量(或字符串等价物)”,但似乎无法解决数据框中不需要的前导零。
我对 R 比较陌生,但我知道我可以开发一些(在我看来)复杂的代码,通过对数据帧中的向量进行子集化,然后将这些向量组合成一个完整的数据帧来删除前导零。我想避免这种情况。
这是一个简单的数据框:
df <- structure(list(est = c(0.05, -0.16, -0.02, 0, -0.11, 0.15, -0.26,
-0.23), low2.5 = c(0.01, -0.2, -0.05, -0.03, -0.2, 0.1, -0.3,
-0.28), up2.5 = c(0.09, -0.12, 0, 0.04, -0.01, 0.2, -0.22, -0.17
)), row.names = c(NA, 8L), class = "data.frame")
这使
df
est low2.5 up2.5
1 0.05 0.01 0.09
2 -0.16 -0.20 -0.12
3 -0.02 -0.05 0.00
4 0.00 -0.03 0.04
5 -0.11 -0.20 -0.01
6 0.15 0.10 0.20
7 -0.26 -0.30 -0.22
8 -0.23 -0.28 -0.17
我想要
est low2.5 up2.5
1 .05 .01 .09
2 -.16 -.20 -.12
3 -.02 -.05 .00
4 .00 -.03 .04
5 -.11 -.20 -.01
6 .15 .10 .20
7 -.26 -.30 -.22
8 -.23 -.28 -.17
对于整个数据框,相对简单的代码是否可行?
编辑:已删除不正确的链接。
解决方案
我正在解释您的问题的意图是将每个数字单元格data.frame
转换为“漂亮打印”的字符串,这可以使用字符串替换和简单的正则表达式(顺便说一句,这是一个好问题,因为我不知道任何配置方法输出数字数据以抑制前导零而不将数字数据转换为字符串!):
df2 <- data.frame(lapply(df,
function(x) gsub("^0\\.", "\\.", gsub("^-0\\.", "-\\.", as.character(x)))),
stringsAsFactors = FALSE)
df2
# est low2.5 up2.5
# 1 .05 .01 .09
# 2 -.16 -.2 -.12
# 3 -.02 -.05 0
# 4 0 -.03 .04
# 5 -.11 -.2 -.01
# 6 .15 .1 .2
# 7 -.26 -.3 -.22
# 8 -.23 -.28 -.17
str(df2)
# 'data.frame': 8 obs. of 3 variables:
# $ est : chr ".05" "-.16" "-.02" "0" ...
# $ low2.5: chr ".01" "-.2" "-.05" "-.03" ...
# $ up2.5 : chr ".09" "-.12" "0" ".04" ...
如果您想获得小数点后的固定位数(如预期输出中所示,但未明确要求),您可以使用sprintf
or format
:
df3 <- data.frame(lapply(df, function(x) gsub("^0\\.", "\\.", gsub("^-0\\.", "-\\.", sprintf("%.2f", x)))), stringsAsFactors = FALSE)
df3
# est low2.5 up2.5
# 1 .05 .01 .09
# 2 -.16 -.20 -.12
# 3 -.02 -.05 .00
# 4 .00 -.03 .04
# 5 -.11 -.20 -.01
# 6 .15 .10 .20
# 7 -.26 -.30 -.22
# 8 -.23 -.28 -.17
注意:此解决方案对不同的小数点字符(不同的语言环境)不可靠 - 它总是需要一个小数点......
推荐阅读
- python - 如何使用 Youtube Data APIv3 获取多个视频的统计信息?
- ios - AR Kit 2.0 跟踪来自服务器的图像
- php - FFMPEG 没有“解码”正确的 url 输入
- python - Keras 时间序列输入形状
- c++ - 调用默认构造函数时模板可变参数编译错误
- html - Bootstrap 4.1.3,下拉菜单不起作用
- macos - 如何在 Mac 上安装 Homebrew?dyld:库未加载:@rpath/libssl.1.0.0.dylib
- qt - Cmake 在 QTCreator 中没有正确解析
- common-lisp - 如何获取函数的参数数量
- gradle - 如何在 gradle 中添加预处理任务