首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何匹配两个不同表的条件(R语言)

如何匹配两个不同表的条件(R语言)
EN

Stack Overflow用户
提问于 2020-11-20 19:02:57
回答 2查看 80关注 0票数 1

假设我有这样的数据:

代码语言:javascript
运行
复制
data_a <- data.frame(
   
    "Node_A" = c("John", "John", "John", "Peter", "Peter", "Peter", "Tim", "Kevin", "Adam", "Adam", "Xavier"),
    "Node_B" = c("Claude", "Peter", "Tim", "Tim", "Claude", "Henry", "Kevin", "Claude", "Tim", "Henry", "Claude")
   
)



food <- data.frame(
   
    "Person" = c("John", "Peter", "Tim", "Kevin", "Adam", "Xavier", "Claude", "Henry"),
"Favorite_Food" = c("pizza", "pizza", "tacos", "pizza", "ice cream", "sushi", "sushi", "pizza")
)

我想在"data_a“文件中创建一个名为”公共“的新列。对于给定的行,如果两个人有相同的"Favorite_Food“(”食物“),那么”公共“的值将是"1”,否则"0“。

我不知道如何开始解决这个问题。

我试图创建以下逻辑:

代码语言:javascript
运行
复制
data_a$common = ifelse(c(data_a$Node_A, food$Person, food$Favorite_Food) = c(data_a$Node_B, food$Person, food$Favorite_Food)), data_a$common = "1", "0")

但我不确定这是否正确。

有人能告诉我怎么做吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-20 19:19:08

这是一个基本的R解。它使用match两次为每个人获取食物,然后比较每一行的两种食物。

代码语言:javascript
运行
复制
i <- match(data_a$Node_A, food$Person)
j <- match(data_a$Node_B, food$Person)
data_a$common <- as.integer(food$Favorite_Food[i] == food$Favorite_Food[j])

data_a
#   Node_A Node_B common
#1    John Claude      0
#2    John  Peter      1
#3    John    Tim      0
#4   Peter    Tim      0
#5   Peter Claude      0
#6   Peter  Henry      1
#7     Tim  Kevin      0
#8   Kevin Claude      0
#9    Adam    Tim      0
#10   Adam  Henry      0
#11 Xavier Claude      1

最后清理一下。

代码语言:javascript
运行
复制
rm(i, j)
票数 0
EN

Stack Overflow用户

发布于 2020-11-20 19:20:54

如果您确实想在match中使用ifelse,可以尝试以下方法。

使用match(data_a$Node_A, food$Person)本身将为您提供food$Person中第一个匹配的Node_A名称的索引或位置(Node_A是要匹配的值,food$Person是要匹配的值):

代码语言:javascript
运行
复制
[1] 1 1 1 2 2 2 3 4 5 5 6

例如,Node_A中的第四个人是Peter,这里的结果向量中的第四个元素是2,所以food中的第二行将是Peter (比萨)想要的食物。

通过获取match结果并将其包含在food$Favorite_Food (如food$Favorite_Food[2] )中,您将在第二行中为Peter获得相应的最喜欢的食物。

同样的事情可以做NodeB和比较。

代码语言:javascript
运行
复制
data_a$common <- ifelse(
  food$Favorite_Food[match(data_a$Node_A, food$Person)] == 
  food$Favorite_Food[match(data_a$Node_B, food$Person)], 1, 0)

输出

代码语言:javascript
运行
复制
   Node_A Node_B common
1    John Claude      0
2    John  Peter      1
3    John    Tim      0
4   Peter    Tim      0
5   Peter Claude      0
6   Peter  Henry      1
7     Tim  Kevin      0
8   Kevin Claude      0
9    Adam    Tim      0
10   Adam  Henry      0
11 Xavier Claude      1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64935397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档