r - 将 Col2:ncol(df) 转换为百分比格式
问题描述
我有一个数据框,每个月都会出现一个新的列。如何将 Col2 中的所有列转换为数据框中的列数为没有小数点的百分比格式?
我想我应该做这样的事情:
df
Col1 Col2 Col3
A 0.3 0.4
B 0.3 0.5
C 0.3 0.1
df[,2:ncol(df)] <- label_percent(accuracy = 1L)(df[,2:ncol(df)])
但这不起作用。
更新:在 databricks 中,我想从 display() 函数中排序,但它不允许我,因为它正在读取 label_percent() 作为字符值
解决方案
一个选项是lapply
循环列,应用label_percent
并将其分配回数据集列。如果我们想在应用之前对列进行排序,label_percent
因为输出列是character
类
library(scales)
dfnew <- df[do.call(order, df[-1]),]
dfnew[-1] <- lapply(dfnew[-1], function(x) label_percent(accuracy = 1)(x))
或者如果我们想pad
在开头为 0
library(stringr)
df[-1] <- lapply(df[-1], function(x)
str_pad(label_percent(accuracy = 1)(x), width = 3, pad = '0'))
或使用dplyr
library(dplyr)
library(scales)
df1 <- dfnew %>%
mutate(across(-1, ~ label_percent(accuracy = 1)(.)))
或使用percent
来自formattable
library(formattable)
df1 <- df %>%
mutate(across(-1, ~ percent(.)))
df1
# Col1 Col2 Col3
#1 A 30.00% 40.00%
#2 B 30.00% 50.00%
#3 C 30.00% 10.00%
检查sort
ing
df1 %>%
arrange(Col3)
# Col1 Col2 Col3
#1 C 30.00% 10.00%
#2 A 30.00% 40.00%
#3 B 30.00% 50.00%
df1 %>%
arrange(desc(Col3))
# Col1 Col2 Col3
#1 B 30.00% 50.00%
#2 A 30.00% 40.00%
#3 C 30.00% 10.00%
数据
df <- structure(list(Col1 = c("A", "B", "C"), Col2 = c(0.3, 0.3, 0.3
), Col3 = c(0.4, 0.5, 0.1)), class = "data.frame", row.names = c(NA,
-3L))
推荐阅读
- laravel - Laravel 批量发送带有通知的邮件
- reactjs - 仅在少数路线上渲染部分组件
- puppet - 如何从基于 Ruby 的自定义类型的清单中实例化定义的类型?
- r - 有没有办法用 Shiny R 在 textInput 中放置超链接
- sharepoint-online - SPFx:如何使用列表名称填充下拉列表
- sas - 关于在 SAS 中使用指定标准保持观察
- dialogflow-es - 如果没有意图匹配,如何防止谷歌操作关闭对话?
- javascript - 是否可以提供我的“ajax-divs”URL 参数?
- javascript - 使用 jest 监视未导出的 node.js 函数未按预期工作
- angular - 从先前调用的方法获得响应后如何调用方法