#r #dataframe
Вопрос:
У меня есть эти два кадра данных:
a <- c('A','B','C','D','E','F','G','H')
b <- c(1,2,1,3,1,3,1,6)
c <- c('K','K','H','H','K','K','H','H')
frame1 <- data.frame(a,b,c)
a <- c('A','A','B','B','C','C','D','D','E','E','F','F','G','H','H')
d <- c(5,5,6,3,1,9,1,0,2,3,6,5,5,5,4)
e <- c('W','W','D','D','D','D','W','W','D','D','W','W','D','W','W')
frame2<- data.frame(a,d,e)
И теперь я хочу включить столбец » e » из «фрейма 2» в «фрейм1″ в зависимости от совпадающего значения в столбце » a » обоих фреймов данных. Примечание: «e» одинаково для всех строк с одинаковым значением в «a».
Результат должен выглядеть так:
a b c e
1 A 1 K W
2 B 2 K D
3 C 1 H D
4 D 3 H W
5 E 1 K D
6 F 3 K W
7 G 1 H D
8 H 6 H W
Какие-нибудь сладости?
Комментарии:
1.
merge(frame1, frame2, by = 'a')
и удалите столбецd
из этого
Ответ №1:
Вы можете использовать match
для сопоставления значения в столбце » а » обоих фреймов данных:
frame1$e <- frame2$e[match(frame1$a, frame2$a)]
frame1
# a b c e
#1 A 1 K W
#2 B 2 K D
#3 C 1 H D
#4 D 3 H W
#5 E 1 K D
#6 F 3 K W
#7 G 1 H D
#8 H 6 H W
или с помощью merge
:
merge(frame1, frame2[!duplicated(frame2$a), c("a", "e")], all.x=TRUE)
Ответ №2:
вы можете выполнить операцию объединения для столбца «a» обоих фреймов данных и принимать только те значения, которые совпадают. вы можете выполнить соединение слева , а затем удалить столбец » a » из 2-го кадра данных, а также удалить остальные столбцы, которые не нужны из 2-го кадра данных.
Ответ №3:
С помощью dplyr
:
library(dplyr)
frame2 %>%
distinct(a, e, .keep_all = TRUE) %>%
right_join(frame1, by = 'a') %>%
select(-d) %>%
arrange(a)
# a e b c
#1 A W 1 K
#2 B D 2 K
#3 C D 1 H
#4 D W 3 H
#5 E D 1 K
#6 F W 3 K
#7 G D 1 H
#8 H W 6 H