我正在使用openxlsx包创建excel文件。要将列格式化为美元,示例中说要将类设置为'currency':
class(df$Currency) <- 'currency'
但是,我想将此应用于许多列,如一次,并重复一次货币,一次百分比等。这是我的最终目标,无论我如何到达那里--这是我迄今为止所做的尝试。
首先是工作示例:
df <- data.frame(sales = c(10, 20, 30, 40, 50), returns = c(-5, -10, -20, 0, 0))
class(df$sales) <- 'currency'
class(df$sales)
[1] "currency"
现在使用dplyr和mutate尝试1:
df %>%
mutate_all(`class<-`(., 'currency'))
Error: Can't create call to non-callable object
尝试2:
df <- df %>%
`class<-`(., 'currency')
df
$sales
[1] 10 20 30 40 50
attr(,"class")
[1] "currency"
这更接近我想要的,但输出是一个列表,as.data.frame和as.tbl都抱怨类'currency'没有方法。
当我使用类(df$sales)<- 'currency'时,我可以在现有的dataframe中更改类。
我感觉这是一个学习更多关于类的好机会(我复习了关于类的高级R部分,但无法与我的问题联系起来)
3条答案
按热度按时间nfs0ujit1#
回应@Frank的评论:
jrcvhitl2#
可以使用
purrr
,但是只有当每个列也从numeric
继承时(即同时是货币和数字),结果才能被强制转换为 Dataframe 。我不知道这对openxlsx
是否足够好。给予
thigvfpy3#
我不知道如何使用
dplyr
做到这一点,但这里有一个工作的方法。