Найти подходящие строки между двумя кадрами данных только по первому слову - PullRequest
1 голос
/ 03 марта 2020

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

University | Expenditures

Abilene Christian University | 7041
Adelphi University | 10527
Albertson College | 9727
Boston University | 1234
etc.
University | Power_Rating
Abilene Christian | 0.5064
Air Force | 0.6543
Alabama | 0.7391
Boston | 0.324
etc.

Я пытаюсь объединить оба кадра данных, чтобы создать общий кадр данных, который состоит из всех столбцов университета, Power_Rating и Expenditures. вместе.

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

# Loading necessary libraries
library("dplyr")
library("tidyr")
library("ggplot2")

# Reading and setting the relevant datasets
college_basketball_df <- read.csv("cbb19.csv", stringsAsFactors = FALSE)
us_colleges_df <- read.csv("College.csv", stringsAsFactors = FALSE)

# Selecting relevant columns in the dataframes ()
us_colleges_df <- us_colleges_df %>% 
  select(X, Expend) %>% 
  rename(University = X, Expenditures = Expend)

college_basketball_df <- college_basketball_df %>% 
  select(TEAM, BARTHAG) %>% 
  rename(University = TEAM, Power_Rating = BARTHAG)

# Arrange both datasets so that they be combined/joined together
us_colleges_df <- arrange(us_colleges_df, University)
college_basketball_df <- arrange(college_basketball_df, University)

View(us_colleges_df)
View(college_basketball_df)
combined_df <- left_join(us_colleges_df, college_basketball_df, by="University")

Мой текущий код использует left_join, который пытается найти точные совпадения в строках между кадрами данных (это приводит к тому, что весь столбец power_rating будет NA, так как нет совпадающих строк), и я хотел бы знать, есть ли способ присоединиться только по первому слову в колонке университета?

1 Ответ

2 голосов
/ 03 марта 2020

Вероятно, вы можете извлечь одно слово из столбца University и затем выполнить объединение.

library(dplyr)

df1 %>% mutate(name = stringr::word(University)) %>%
   left_join(df2 %>% mutate(name = stringr::word(University)), by = "name")
...