简体   繁体   中英

Subsetting data from a dataframe and taking specific values from the subsetted values

I want to check if values (in example below "letters") in 1 dataframe appear in another dataframe. And if that is the case, I want a value (in example below "ranking") which is specific for that value from the first dataframe to be added to the second dataframe... What I have now Is the following:

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)

However... Instead of getting a '1' when the letters overlap, I want to get the specific 'ranking' number from Df1.

Thanks!

What you're looking for is called a merge :

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

Also, fun fact, you can create a dataframe and name the columns at the same time (and you'll usually want to "turn off" strings as factors):

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

dplyr package is best for this.

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

this will show a NA for "D" if you want to keep it.

Otherwise you can do semi_join

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

And this will only keep the ones they have in common (intersection)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM