匹配R中两个数据框之间的单词

match words between two data frame in R

我在 R 中工作,我有两个阿拉伯语的数据框,如下所示是数据集的示例: 数据集 1: 词汇

    term
1:   شكرا
2:    رقي
3: تضيعون
4:   ابكي

数据集 2: posneg

    score     words 
1      ابكي      0
2      تضيعون     0
3      خسرت     0
4      ظلمونا     0
5      لا     0
6      مستهتر     0
7      وبلا     0
8      احباط     0
9      تفشلتوا     0
10      خسرتم     0
11      عقدتك     0
12      للاسف     0
13      مشكله     0
29      اضاع     0
30      حاقده     0
31      خطا     0
32      غير     0
33      ما     0 
116     ابدعوا     1
117     اهنيكم     1
118     حبا     1
119     شكرا     1
120     فرحه     1
121     ممتاز     1
122     وزعيما     1
123     اجتهد     1
124     باهر     1
125     حبك     1
126     صحيح     1
127     فزت     1

我需要比较数据 1 中的 term 列和数据 2 中的 words 列,因此如果数据 1 中 term 列中的任何单词与 words 列中的任何单词相匹配数据 2 给它相同的分数,如果单词不匹配我想写(新)。这是我期望的结果:

  score      term
1:   شكرا     1 
2:   1       رقي 
3:   0      تضيعون
4:   0        ابكي

这是我写的代码 但是出现错误。

 n<-length(vocab$term)
  n2<-length(posneg$words)


      for (i in 1:n) {
        if (vocab$term[i] == for (o in 1:n2) { posneg$words[o]}) 
          {
        vocab <- cbind(vocab, "score" = posneg$score[o] )} #add new column)
        else{
          vocab <- cbind(vocab, "score" = "no") #add new column
            }
        }

希望你理解我,谢谢!

萨拉姆,

不完全确定这是否是您想要的。尽管如此,我已经使用 tidyverse 来格式化 if_else 语句以匹配两个数据库中的单词列。如果单词出现在两者中,则将 1 打印到新数据,如果它们不出现,则打印 0。

例如,

library(tidyverse)

data1 <- data.frame(Term = c("A","B","Z","D"))
data2 <- data.frame(words = c("A","B","C","D","E","F"), score = c(1,4,5,2,4,5))

data3 <- data1 %>%
  mutate(score = if_else(data1$term %in% data2$words, 1, 0))

> str(data3)
'data.frame':   4 obs. of  2 variables:
 $ Term : chr  "A" "B" "Z" "D"
 $ score: num  1 1 0 1

这是否回答了您的问题?

使用 Pryore 的数据和 data.table:

library(data.table)
setDT(data1)
setDT(data2)
data2[data1, on = .(words = Term)]
   words score
1:     A     1
2:     B     4
3:     Z    NA
4:     D     2