Как рассчитать проценты для каждого ответа в наборе данных и отобразить процент в скобках - PullRequest
0 голосов
/ 13 февраля 2019

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

Это набор данных, который яя работаю с

           A    B     C      D
50% 26.73194  5.5 21.50  9.150
5%  18.91642  1.6  4.55  7.645
95% 31.14233 21.3 56.30 10.570

Я хотел бы рассчитать процент для всех цифр в наборе данных, с числом 39938, равным 100%.

Затем я хотел бы отобразить процентв скобках рядом с каждой цифрой.

Набор данных, который я хотел бы получить, выглядит следующим образом:

            A            B           C             D 
50% 26.73194(0.066)  5.5(0.014) 21.50(0.054)  9.150(0.002) 
5%  18.91642(0.047)  1.6(0.004)  4.55(0.001)  7.645(0.017) 
95% 31.14233(0.77)   21.3(0.054) 56.30(0.14) 10.570(0.025)

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Из ответа другого пользователя можно получить ожидаемый результат, используя:

as.data.frame(purrr::map(df,function(x) paste0(x,"(",round(x/3,2),")")))


        A       B
1 1.63(0.54)    6(2)
2 20.5(6.83) 1(0.33)
3      18(6) 5(1.67)
4  26.7(8.9)   24(8)

Первоначальный вопрос был неясен.

ORIGINAL

Ожидаемый результат и логический путь неясны.Вот попытка:

 Vals<-colSums(df)#I actually think nrow(df) is better
Values<-as.vector(Vals)
    as.data.frame(purrr::map2(df,Values,function(x,y)  paste0(x,"(",round(x*100/y,2),")")))

Это дает: Это использует суммы столбца, чтобы получить проценты.

        A         B
1  1.63(2.44)  6(16.67)
2 20.5(30.67)   1(2.78)
3   18(26.93)  5(13.89)
4 26.7(39.95) 24(66.67)
0 голосов
/ 13 февраля 2019

Вопрос не очень четко сформулирован, но я думаю, что вы хотите это:

df1[] <- lapply(df1, function(x) {paste0(x,"(",round(x/3,2),")")})

, что приводит к:

> df1
           A       B
1 1.63(0.54)    6(2)
2 20.5(6.83) 1(0.33)
3      18(6) 5(1.67)
4  26.7(8.9)   24(8)

Деление на три связано с тем, чтопредполагается, что значение 300 соответствует 100% согласно ОП.

0 голосов
/ 13 февраля 2019

Попробуйте это:

library(dplyr)

df %>%
  mutate_all(~paste0(.x, '(', round(.x * 100 / sum(.x)), ')'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...