Подмножество данных из фрейма данных и получение определенных значений из подмножественных значений - PullRequest
0 голосов
/ 13 сентября 2018

Я хочу проверить, появляются ли значения (в примере ниже «букв») в 1 кадре данных в другом кадре данных. И если это так, я хочу, чтобы значение (в примере ниже «ранжирование») было специфичным для этого значения из первого кадра данных, которое будет добавлено ко второму кадру данных ... Теперь у меня есть следующее:

Df1 <- data.frame(c("A", "C", "E"), c(1:3))
colnames(Df1) <- c("letters", "ranking")

Df2 <- data.frame(c("A", "B", "C", "D", "E"))
colnames(Df2) <- c("letters")

Df2$rank <- ifelse(Df2$letters %in% Df1$letters, 1, 0)

Однако ... Вместо того, чтобы получать «1», когда буквы перекрываются, я хочу получить конкретное «рейтинговое» число из Df1.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018
Для этого лучше всего подойдет пакет

dplyr.

Df2 <- Df2 %>%
    left_join(Df1,by = "letters")

это покажет NA для "D", если вы хотите сохранить его.

В противном случае вы можете сделать semi_join

DF2 <- Df2 %>%
   semi_join(Df1, by = "letters")

И это будет только то, что у них общего (пересечение)

0 голосов
/ 13 сентября 2018

То, что вы ищете, называется слиянием :

merge(Df2, Df1, by="letters", all.x=TRUE)

Кроме того, забавный факт, что вы можете создать фрейм данных и назвать столбцы одновременно (и вы обычно захотите «отключить» строки как факторы):

df1 <- data.frame(
    letters = c("a", "b", "c"), 
    ranking = 1:3, 
    stringsAsFactors = FALSE)
...