我正在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
}
}
希望您能理解我,谢谢!
答案 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