Как объединить два фрейма данных - PullRequest
1 голос
/ 01 апреля 2020

Допустим, у меня есть два фрейма данных. Так, например:

a <- c(10,20,30,40)
b <- c('b', 'p', 't', 'x')
c <- c(TRUE,FALSE,TRUE,FALSE)
d <- c(2.5, 8, 10, 7)
df1 <- data.frame(a,b,c,d)


e<-c(2.5,2.5,8,8,8,10,10,10)
f<-c(T, T, F, F, F, T, F, T)
df2<- data.frame(e,f)

Я знаю, что все значения столбца e в информационном кадре 2 содержатся в столбце d информационного кадра 1.

Я хочу иметь возможность поместить столбец b в фрейм данных 2, чтобы он выглядел следующим образом:

e<-c(2.5,2.5,8,8,8,10,10,10)
f<-c(T, T, F, F, F, T, F, T)
b<-b("b", "b", "p", "p", "p", "t", "t", "t")
df2<- data.frame(e,f,c)

То есть, когда значение в столбце e в фрейме данных 2 равно значению в столбце d фрейма данных 1, я хочу разместить значение столбец C, соответствующий этому значению в столбце D, в новый столбец в Dataframe 2.

На самом деле я использую наборы данных намного большего размера, чем этот, поэтому я надеюсь на что-то, что сделает это своевременно (т. е. предпочтительно не вложенные в петли). Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

3 голосов
/ 01 апреля 2020

Мы можем сделать merge в base R

merge(df2, df1[c('b', 'd')], by.x = 'e', by.y = 'd')
2 голосов
/ 01 апреля 2020

Другое базовое решение R с использованием match

df2$b <- df1$b[match(df2$e,df1$d)]

, что дает

> df2
     e     f b
1  2.5  TRUE b
2  2.5  TRUE b
3  8.0 FALSE p
4  8.0 FALSE p
5  8.0 FALSE p
6 10.0  TRUE t
7 10.0 FALSE t
8 10.0  TRUE t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...