Расчет процентов в R Dataframe на основе итога?

В настоящее время у меня есть фрейм данных, который выглядит так

ИЗМЕНИТЬ НОВОЕ ОБНОВЛЕНИЕ НОВОГО ФРЕЙМА ДАННЫХ

    Country    Information  Value 
    UK         Cars         50 
    UK         Sheep        20
    UK         Cats         15
    UK         Dogs         10 
    UK         Shoes        3
    UK         Hats         2
    Total                   100

Столбец "Страна" повторяется 6 раз, последняя строка называется "Итого", "Информация - это просто случайная информация", а "Значение" - числовое значение, они суммируются до 100 и находятся в порядке убывания от самого высокого до самого низкого

Я хотел бы найти способ в R добавить новый столбец (df $ Percentage), который вычисляет процент каждой строки на основе процента от итога в столбце Value

так, например, новый столбец будет иметь

Country    Information  Value     Percentage 
    UK         Cars         50     0.50 (or can be 50%)
    UK         Sheep        20     0.20 
    UK         Cats         15     0.15
    UK         Dogs         10     0.10
    UK         Shoes        3      0.03
    UK         Hats         2      0.02
    Total                   100    1.00 (or nothing here)

и так далее, чтобы достичь конца кадра данных, где TOTAL либо будет пустым (при условии, что процент остановился до этого места, либо будет равен 1)

Я новичок в R, поэтому приветствуется любая помощь

Спасибо

Попробуйте df$Percentage <- paste0(df$Value/100*100, "%")

Agaz Wani 26.04.2018 12:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
2 073
1

Ответы 1

df$percentage <- df$Value/(sum(df$Value)/2)
#results
  Country Information Value percentage
1      UK        Cars    50       0.50
2      UK       Sheep    20       0.20
3      UK        Cats    15       0.15
4      UK        Dogs    10       0.10
5      UK       Shoes     3       0.03
6      UK        Hats     2       0.02
7   Total               100       1.00

Я разделил сумму на 2, потому что последняя строка уже содержит сумму столбца Value


Отредактируйте, чтобы предоставить воспроизводимый пример:

structure(list(Country = c("UK", "UK", "UK", "UK", "UK", "UK", 
"Total"), Information = c("Cars", "Sheep", "Cats", "Dogs", "Shoes", 
"Hats", ""), Value = c(50, 20, 15, 10, 3, 2, 100)), .Names = c("Country", 
"Information", "Value"), class = "data.frame", row.names = c(NA, 
-7L))

Привет, спасибо за помощь, но я все еще не получил правильного результата, какие-либо мысли о том, почему? В настоящее время он говорит, что длина замены короче, чем исходная

Data Science 26.04.2018 12:31

Не могли бы вы дать нам тестовый набор данных, например dput(df) и скопируйте / вставьте результаты сюда

Nicolas Rosewick 26.04.2018 12:35

отредактировали исходное сообщение, пожалуйста, посмотрите на новый фрейм данных, спасибо

Data Science 26.04.2018 12:36

Было бы проще, если бы вы предоставили нам воспроизводимый набор данных, как предлагалось в моем предыдущем комментарии.

Nicolas Rosewick 26.04.2018 12:40

Привет, я добавил фактический фрейм данных, который я использую, выше - реальный фрейм данных, который я использую, спасибо

Data Science 26.04.2018 12:41

не могли бы вы опубликовать результаты dput. Это хорошая практика для вопроса, связанного с R;)

Nicolas Rosewick 26.04.2018 12:42

Извините, я не могу сейчас отправиться в путь, если бы вы могли посоветовать мне лучший способ вычислить процентное соотношение, которое было бы действительно полезно

Data Science 26.04.2018 12:44

Команда, которую я опубликовал в своем ответе, должна работать с фреймом данных, который вы определили в своем вопросе.

Nicolas Rosewick 26.04.2018 12:45

Он выводит столбец NA

Data Science 26.04.2018 12:51

это должно быть довольно прямолинейно, просто разделив значения на общую сумму в новый столбец - я пробовал несколько вещей, но без решения!

Data Science 26.04.2018 12:52

Полагаю, ваш столбец «Ценность» - это факторы. Сделайте df $ Value <- as.numeric (as.character (df $ Value)) перед применением другой функции

Nicolas Rosewick 26.04.2018 12:58

Привет, Николас, я обнаружил проблему, в новом наборе данных есть новая 7-я строка со значением, установленным как NA, поэтому я не могу применить то, что вы написали, есть ли способ передать NA, чтобы это работало?

Data Science 26.04.2018 13:02

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