Mam następujące ramki danych: > dput(df) structure(list(word = c("hello", "red", "hello")), polaryzacja = c(0, 0, 0)), row.names = c( 5L, 10L, 17L), klasa = "dane....

1
Mark 25 czerwiec 2021, 20:49

4 odpowiedzi

Najlepsza odpowiedź

Możemy użyć match między kolumną 'słowo' i 'x' odpowiednio z 'df', 'df2', aby uzyskać pozycję, użyj tego, aby wyodrębnić odpowiednie 'y' z 'df2'

df$polarity <- df2$y[match(df$word, df2$x)]

-wynik

 df
    word polarity
5  hello      0.1
10   red     -0.3
17 hello      0.1
3
akrun 25 czerwiec 2021, 17:51

Możesz użyć polaryzacji df$<-df2$y

-2
gin 25 czerwiec 2021, 17:58

Użyj sprzężenia lewego lub sprzężenia wewnętrznego w dplyr. właściwie nie musisz wcześniej zmieniać nazw kolumn.

new_df<-left_join(df1,df2, by = c("word" = "x))

Będziesz mieć dodatkową kolumnę ze złączenia, ponieważ złączenia zachowują wszystkie kolumny, których możesz się pozbyć przed złączeniem lub po nim.


###Before the join run this

df1$polarity = NULL

####join
names(new_df)<- c("word", "polarity")

#### if performed  after the  join
new_df$polarity = NULL
names(new_df)<- c("word", "polarity")
2
d3hero23 25 czerwiec 2021, 18:21

Oto uporządkowane rozwiązanie, wykorzystujące left_join.

library(tidyverse)

df1 %>%
  # Remove polarity column from df1
  select(-polarity) %>%
  # Left join using the word column
  # First you'll need to rename the x column in df2 to be the same in df1 (i.e., word)
  left_join(df2 %>%
              rename("word" = x), 
            # The name of the column to use for the left join
            by = "word")

#   word    y
#1 hello  0.1
#2   red -0.3
#3 hello  0.1
3
Jonathan V. Solórzano 25 czerwiec 2021, 17:55