Рассчитать медиану столбца X на основе значений Y в условном / групповом столбце, найденных в списке - PullRequest
0 голосов
/ 14 марта 2019

Я хотел бы изменить эту строку:

`with(EquityFundamentals, median(EquityFundamentals$Forward.P.E[EquityFundamentals$Industry == "Entertainment"], na.rm = "TRUE"))`
  • , чтобы использовать список имен, а не только "Развлечения"
  • Список имен - это символы в вектореназывается "Секторы"
  • Вывод будет:
    • новые значения для каждого сектора (например, медиана для каждого сектора; MedianEnergy, MedianTech и т. д.) ИЛИ
    • данныерамка с сектором в столбце 1 и медианой в столбце 2

Данные:

> EquityFundamentals
  Sector.Title. Forward_P.E.Title.
1        Energy                6.7
2        Energy                7.5
3          Tech               10.4
4          Tech               11.5

structure(list(
  Sector.Title. = structure(c(1L,1L,2L,2L),
    .Label = c("Energy","Tech"), class = "factor"),
  Forward_P.E.Title. = c(6.7,7.5,10.4,11.5)),
  .Names = c("Sector.Title.", "Forward_P.E.Title."
), class = "data.frame", row.names = c(NA, -4L))

1 Ответ

0 голосов
/ 15 марта 2019

Вы можете сделать это так (не самым элегантным способом, но работает).

Sectors <- c("Entertainment", "Energy", "Tech")
for (i in 1:length(Sectors)){with(EquityFundamentals, print(paste((Sectors[i]), median(EquityFundamentals$Forward.P.E[EquityFundamentals$Industry==(Sectors[i])], na.rm = "TRUE"), sep=",")) )}

Есть много способов выполнить задачу, включая by, dplyr, splitи несколько других, которые подробно описаны в этом посте.

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