匹配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
我在 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