在R中两个数据帧之间匹配单词

时间:2018-12-10 09:41:56

标签: r dataframe match word

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

    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列中的任何单词与数据2的word列中的任何单词匹配给它相同的分数,如果单词不匹配,我想写(新)。这是我期望的结果:

  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
            }
        }

希望您能理解我,谢谢!

2 个答案:

答案 0 :(得分:2)

萨拉姆

不完全确定这是否是您想要的。尽管如此,我还是使用tidyverse来格式化if_else语句以匹配两个数据库中的word列。如果两个单词同时出现,则新数据将打印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

这能回答您的问题吗?

答案 1 :(得分:2)

使用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