Преобразовать Col2:ncol(df) в процентный формат

У меня есть фрейм данных, в котором каждый месяц будет появляться новый столбец. Как преобразовать все столбцы из Col2 в число столбцов в фрейме данных в процентном формате без десятичных точек?

Я думаю, что я должен сделать что-то вроде этого:

Дф

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)])

Но это не работает.

ОБНОВЛЕНИЕ: в блоках данных я хотел бы выполнить сортировку из функции display(), но она не позволяет мне, потому что читает label_percent() как символьное значение

Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вариантом будет 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%

Проверка sorting

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))

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат.

Samuel Liew 19.12.2020 03:31

Другие вопросы по теме