У меня есть фрейм данных, в котором каждый месяц будет появляться новый столбец. Как преобразовать все столбцы из 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() как символьное значение
Вариантом будет 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))
Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат.