Vlookup и Count String Вхождения в отдельной таблице R в новый столбец - PullRequest
1 голос
/ 27 января 2020

У меня есть два кадра данных. Ниже приведены примеры, но они должны быть легко воспроизведены для иллюстрации.

df1 <- data.frame(School = c("Omaha South", "Omaha Central", "Grand Island"), 
                  Enrollment = c(2166, 2051, 1982))
df2 <- data.frame('Away Score' = c(25, 57, 76), 
                  'Away Team' = c("Omaha South", "Omaha Central", "Grand Island"),
                  'Away Score' = c(52, 88, 69), 
                  'Away Team' = c("Omaha Central", "Grand Island", "Omaha South"),                 
                  Date = c("1/11/2020", "1/12/2020", "1/13/2020"),
                  Winner = c("Omaha Central", "Grand Island", "Grand Island"),
                  Loser = c("Omaha South", "Omaha Central", "Omaha South"))

Моя цель - создать в df1 новый столбец под названием «Wins», который ищет школу в df1, а затем подсчитывает количество раз эта школа указана в столбце «Победитель» df2.

Поэтому хочу, чтобы df1 выглядел следующим образом:

df1 <- data.frame(School = c("Omaha South", "Omaha Central", "Grand Island"), 
                  Enrollment = c(2166, 2051, 1982),
                  Wins = c(0, 1, 2))

Я пробовал несколько решений безрезультатно, включая sqldf. Моя последняя попытка была приведена ниже, но она выдает ошибку: «1010 * неприменимый метод для group_by_, примененный к объекту класса« NULL »

df$Wins %>%
     group_by(df2$Winner) %>%
     mutate(Count=n())

1 Ответ

3 голосов
/ 27 января 2020

В одну сторону, используя dplyr и объединения:

library(dplyr)

df1 %>%
  left_join(df2, by = c('School' = 'Winner')) %>%
  na.omit() %>%
  count(School, name = "wins") %>%
  right_join(df1) %>%
  mutate(wins = replace(wins, is.na(wins), 0))

Используя базу R, мы рассчитываем частоту выигрышей, используя table, конвертируем ее в фрейм данных, используя stack, а затем * 1008. * до df1.

merge(df1, stack(table(factor(df2$Winner, levels = df1$School))), 
           by.x = 'School', by.y = "ind")
...