R将正数和负数都从$ xxx.xx更改为xxx.xx,但不舍入

工作

我有一个df,其中第2列及其他列是美元金额,例如$ 1004.23,($ 1482.40),$ 2423.94等。类似于以下示例:

> df
  id   desc    price
1  0    apple   $1.00
2  1    banana  ($2.25)
3  2    grapes  $1.97

我想先将括号中的数字转换为负数,然后去除美元符号的数字。

for(i in 2:ncol(df)){
    df[[i]] <- as.character(sub(")", "", sub("(", "-", df[[i]], fixed=TRUE), fixed=TRUE))
    df[[i]] <- as.numeric(gsub('[$,]', '', as.character(df[[i]])))
}

目前,我的代码几乎可以实现我想要的功能。我不想要/不需要的一件事就是四舍五入。每当我运行代码时,它也会四舍五入以使上述df变为:

> df
  id   desc    price
1  0    apple  1
2  1    banana -2
3  2    grapes 2

关于如何在不四舍五入的情况下实现目标的任何建议?它与以后的大量计算混乱。

贾普

另一种可能的解决方案基于您自己的尝试,并考虑到您需要转换比示例更多的列:

d[,-c(1:2)] <- lapply(d[,-c(1:2)], 
                      function(x) as.numeric(gsub('[$,]', '', sub(")", "", sub("(", "-", x, fixed=TRUE), fixed=TRUE))))

这使:

> d
  id   desc price price2
1  0  apple  1.00  -5.90
2  1 banana -2.25   2.39
3  2 grapes  1.97  -0.95

或使用for循环:

for(i in 3:ncol(d)){
  d[[i]] <- as.numeric(gsub('[$,]', '', sub(")", "", sub("(", "-", d[[i]], fixed=TRUE), fixed=TRUE)))
}

或使用data.table包装:

library(data.table)
cols <- names(d)[-c(1:2)]
setDT(d)[, (cols) := lapply(.SD, function(x) as.numeric(gsub('[$,]', '', sub(")", "", sub("(", "-", x, fixed=TRUE), fixed=TRUE)))),
         .SDcols = cols]

或使用dplyr包装:

library(dplyr)
d %>% 
  mutate_all(funs(as.numeric(gsub('[$,]', '', sub(")", "", sub("(", "-", ., fixed=TRUE), fixed=TRUE)))), -c(1:2))

都会给您相同的结果。


使用的数据:

d <- structure(list(id = 0:2, desc = c("apple", "banana", "grapes"), 
                    price = c("$1.00", "($2.25)", "$1.97"), 
                    price2 = c("($5.9)", "$2.39", "($0.95)")),
               .Names = c("id", "desc", "price", "price2"), class = "data.frame", row.names = c("1", "2", "3"))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将格式xxxxxxxxxx更改为xxx-xxx-xxxx

来自分类Dev

如何将51.xx.xx.xx:33xxx:user:pass格式化为user:[email protected]:33xxx

来自分类Dev

获取IP地址范围从xxx.xxx.xx.0 / 16

来自分类Dev

Python,正则表达式匹配数字x,xxx,xxx,但不匹配xx,xx,x,

来自分类Dev

PyEZ:jnpr.junos.exception.ConnectRefusedError:ConnectRefusedError(xx.xxx.xxx.xxx)

来自分类Dev

隐藏电话号码的最后几位,例如99XX XXX XXX PHP或jQuery

来自分类Dev

Android中的电话号码格式。(X-XXX-XXX-XX)

来自分类Dev

c# 将线程名 cmd.exe 更改为 xxx.exe

来自分类Dev

AngularJS-数字格式xxx-xx-xxxx

来自分类Dev

在Android中将edittext格式设置为xxx-xx-xxxx

来自分类Dev

AngularJS-数字格式xxx-xx-xxxx

来自分类Dev

如果内部 HTML = X = 在 div XXX 中显示 XX

来自分类Dev

帽流产了!SSHKit :: Runner :: ExecuteError:在主机xxx.xxx.xx.xx上执行时发生异常:部署程序

来自分类Dev

SocketException:无法建立连接,因为目标计算机主动拒绝了它XX.XXX.XX.XXX:443

来自分类Dev

React useState hooks错误:无法将类型“ xxx”的参数分配给类型“ SetStateAction <xx>”的参数

来自分类Dev

.xx-xxx.xx之间的正则表达式编号

来自分类Dev

用于验证xx-xxxxxxx或xxx-xx-xxxx的正则表达式

来自分类Dev

SSH:无法与XXX.XXX.XX.XXX协商:找不到匹配的密钥交换方法。他们提供:diffie-hellman-group1-sha1

来自分类Dev

SSH:无法与XXX.XXX.XX.XXX协商:找不到匹配的密钥交换方法。他们提供:diffie-hellman-group1-sha1

来自分类Dev

在 ExchangeService 中,我遇到此错误通常只允许每个套接字地址(协议/网络地址/端口)使用一次 XX.XXX.XXX.XXX:443

来自分类Dev

Git错误:无法与XX.XX.XXX.XXX协商:找不到匹配的主机密钥类型。他们的报价:ssh-dss

来自分类Dev

COM的put_XXX方法在.NET RCW中是否更改为set_XXX

来自分类Dev

CentOS 7“来自xx.xx.xx.xx端口xxx的无效用户__”-不显示输入的尝试用户名

来自分类Dev

我的AWS ec2实例在ec2-xx-1xx-xxx-24.compute-1.amazonaws.com:8000上运行。我如何使其在ec2-xx-1xx-xxx-24.compute-1.amazonaws.com上运行

来自分类Dev

为给定的整数生成x + xx + xxx + xxxx ...(对于4-> 4 + 44 + 444 ...)

来自分类Dev

在名称为xx的DispatcherServlet中找不到具有URI xxx的HTTP请求的映射

来自分类Dev

如何定义正则表达式从字符串中删除[xx] xxxxx [arch] xxx?

来自分类Dev

已经为元素“ xxx”指定了绑定到名称空间“ xx”的属性“ x”

来自分类Dev

获取表格DB XXX.0E0(XX代表数字)

Related 相关文章

  1. 1

    将格式xxxxxxxxxx更改为xxx-xxx-xxxx

  2. 2

    如何将51.xx.xx.xx:33xxx:user:pass格式化为user:[email protected]:33xxx

  3. 3

    获取IP地址范围从xxx.xxx.xx.0 / 16

  4. 4

    Python,正则表达式匹配数字x,xxx,xxx,但不匹配xx,xx,x,

  5. 5

    PyEZ:jnpr.junos.exception.ConnectRefusedError:ConnectRefusedError(xx.xxx.xxx.xxx)

  6. 6

    隐藏电话号码的最后几位,例如99XX XXX XXX PHP或jQuery

  7. 7

    Android中的电话号码格式。(X-XXX-XXX-XX)

  8. 8

    c# 将线程名 cmd.exe 更改为 xxx.exe

  9. 9

    AngularJS-数字格式xxx-xx-xxxx

  10. 10

    在Android中将edittext格式设置为xxx-xx-xxxx

  11. 11

    AngularJS-数字格式xxx-xx-xxxx

  12. 12

    如果内部 HTML = X = 在 div XXX 中显示 XX

  13. 13

    帽流产了!SSHKit :: Runner :: ExecuteError:在主机xxx.xxx.xx.xx上执行时发生异常:部署程序

  14. 14

    SocketException:无法建立连接,因为目标计算机主动拒绝了它XX.XXX.XX.XXX:443

  15. 15

    React useState hooks错误:无法将类型“ xxx”的参数分配给类型“ SetStateAction <xx>”的参数

  16. 16

    .xx-xxx.xx之间的正则表达式编号

  17. 17

    用于验证xx-xxxxxxx或xxx-xx-xxxx的正则表达式

  18. 18

    SSH:无法与XXX.XXX.XX.XXX协商:找不到匹配的密钥交换方法。他们提供:diffie-hellman-group1-sha1

  19. 19

    SSH:无法与XXX.XXX.XX.XXX协商:找不到匹配的密钥交换方法。他们提供:diffie-hellman-group1-sha1

  20. 20

    在 ExchangeService 中,我遇到此错误通常只允许每个套接字地址(协议/网络地址/端口)使用一次 XX.XXX.XXX.XXX:443

  21. 21

    Git错误:无法与XX.XX.XXX.XXX协商:找不到匹配的主机密钥类型。他们的报价:ssh-dss

  22. 22

    COM的put_XXX方法在.NET RCW中是否更改为set_XXX

  23. 23

    CentOS 7“来自xx.xx.xx.xx端口xxx的无效用户__”-不显示输入的尝试用户名

  24. 24

    我的AWS ec2实例在ec2-xx-1xx-xxx-24.compute-1.amazonaws.com:8000上运行。我如何使其在ec2-xx-1xx-xxx-24.compute-1.amazonaws.com上运行

  25. 25

    为给定的整数生成x + xx + xxx + xxxx ...(对于4-> 4 + 44 + 444 ...)

  26. 26

    在名称为xx的DispatcherServlet中找不到具有URI xxx的HTTP请求的映射

  27. 27

    如何定义正则表达式从字符串中删除[xx] xxxxx [arch] xxx?

  28. 28

    已经为元素“ xxx”指定了绑定到名称空间“ xx”的属性“ x”

  29. 29

    获取表格DB XXX.0E0(XX代表数字)

热门标签

归档