Частичное совпадение для замены имени переменной - PullRequest
0 голосов
/ 27 мая 2020

Допустим, у меня есть следующие фреймы данных ниже. Как можно использовать «Partial_Match» df2 для замены «CS» df1 на «Name» из df2? Я ищу результат, который выглядит как df3. Спасибо.

old <- c("CS1.1.length", "CS1.7.length", "CS1.10.length", "CS1.12.length", "CS2.4.length", "CS2.6.length", "CS2.9.length", "CS2.11.length")
new <- c("Bob", "Alex", "Gary", "Taylor", "Tom", "John", "Pat", "Mary")
partial_match <- c("CS1.1", "CS1.7", "CS1.10", "CS1.12", "CS2.4", "CS2.6", "CS2.9", "CS2.ll")
df1 <- data.frame(CS = old, Num = sample(50,8))
df2 <- data.frame(Partial_Match = partial_match, Name = new)
df3 <- data.frame(df2[2],df1[2])

1 Ответ

0 голосов
/ 27 мая 2020

Если old является хорошим представлением вашего полного набора данных, вы можете отбросить .length часть строки и затем выполнить соединение.

Mary здесь не объединяется, потому что partial_match[8] - это CS2.ll, а не CS2.11.

Изменить: для этого решения требуется tidyverse

library(tidyverse)

df1 %>%
  mutate(Partial_Match = tools::file_path_sans_ext(CS)) %>%
  left_join(df2) %>%
  select(Name, Num)

Редактировать 2: то же самое, но с базовым R

df1$Partial_Match <- tools::file_path_sans_ext(df1$CS)
df3 <- merge(df1, df2)
df3 <- df3[,c('Name', 'Num')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...