#r #dataframe #dplyr #purrr
#r #фрейм данных #dplyr #мурлыканье
Вопрос:
я пробую свои силы в частном проекте с R. Следующая проблема:
У меня есть два фрейма данных. Пример таблиц из двух фреймов:
Фрейм1
Home Away
1 Lens Paris SG
2 Rapid Vienna Admira
3 LASK Austria Vienna
4 Shijiazhuang Wuhan Zall
5 Sonderjyske Midtjylland
6 Bohemians Waterford
Фрейм2
# A tibble: 6 x 9
Country League Date Home Away HG AG Res TG
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <chr> <dbl>
1 Mexico Liga MX 10/09/2020 Santos Laguna U.N.A.M.- Pumas 1 2 A 3
2 Mexico Liga MX 10/09/2020 Mazatlan FC Club Tijuana 1 0 H 1
3 Mexico Liga MX 10/09/2020 Cruz Azul Pachuca 1 0 H 1
4 Mexico Liga MX 09/09/2020 Club Leon U.A.N.L.- Tigres 1 1 D 2
5 Mexico Liga MX 09/09/2020 Puebla Club America 2 3 A 5
6 Mexico Liga MX 09/09/2020 Guadalajara Chivas Queretaro 1 1 D 2
теперь я хочу вставить новый столбец в первый фрейм данных, который исключает и подсчитывает количество прямых встреч из второго фрейма данных, т. Е. Home == Домашняя команда и Away == Команда AwayTeam. Возможно ли вставить данные в фрейм данных, который связан с данными из другого фрейма данных?
Ответ №1:
Мы можем использовать data.table
для объединения on
столбцов при подсчете частоты
library(data.table)
setDT(df_2)[df_1, .N, on = .(home, away), by = .EACHI]
# home away N
#1: a c 2
#2: b a 0
#3: c b 1
Или использование base R
с table
df_1$Count <- with(df_2, table(factor(paste(home, away),
levels = unique(paste(df_1$home, df_1$away)))))
данные
df_2 <- structure(list(home = c("a", "a", "c", "b"), away = c("c", "c",
"b", "c")), class = "data.frame", row.names = c(NA, -4L))
df_1 <- structure(list(home = c("a", "b", "c"), away = c("c", "a", "b"
)), class = "data.frame", row.names = c(NA, -3L))
Ответ №2:
Да, вы можете вычислить встречи во втором data.frame, а затем объединить это с первым data.frame:
df_1 <- data.frame(
home = c("a", "b", "c"),
away = c("c", "a", "b")
)
df_1
#> home away
#> 1 a c
#> 2 b a
#> 3 c b
df_2 <- data.frame(
home = c("a", "a", "c", "b"),
away = c("c", "c", "b", "c")
)
df_2
#> home away
#> 1 a c
#> 2 a c
#> 3 c b
#> 4 b c
library(dplyr)
df_2_stats <- df_2 %>%
group_by(home, away) %>%
summarise(number_encounters = n())
#> `summarise()` regrouping output by 'home' (override with `.groups` argument)
df_2_stats
#> # A tibble: 3 x 3
#> # Groups: home [3]
#> home away number_encounters
#> <chr> <chr> <int>
#> 1 a c 2
#> 2 b c 1
#> 3 c b 1
df_1 <- df_1 %>%
left_join(df_2_stats, by = c("home", "away"))
df_1
#> home away number_encounters
#> 1 a c 2
#> 2 b a NA
#> 3 c b 1
Создано 2020-09-11 пакетом reprex (версия 0.3.0)