首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数据框中两列的双重匹配

数据框中两列的双重匹配
EN

Stack Overflow用户
提问于 2018-06-03 04:22:32
回答 2查看 49关注 0票数 -1
代码语言:javascript
复制
library(data.table)
data <- setDT(data.frame(name=c(NA, "bob1", "bob", "jack", "bob1", "bob"), ID=c(1,1,4,3,2,1)))

     name   ID 
1:    NA     1    
2:    bob1   1    
3:    bob    4   
4:    jack   3
5:    bob1   2
6:    bob    1

匹配条件(同时):

  • 如果不同的名称具有相同的ID,请将名称更改为唯一的名称
  • 如果不同的ID具有相同的名称,请将ID更改为唯一的ID

所需输出:

代码语言:javascript
复制
     name   ID 
1:    bob    1    
2:    bob    1    
3:    bob    1   
4:    jack   3
5:    bob    1
6:    bob    1

代码语言:javascript
复制
     name   ID 
1:    bob1   1    
2:    bob1   1    
3:    bob1   1   
4:    jack   3
5:    bob1   1
6:    bob1   1
EN

回答 2

Stack Overflow用户

发布于 2018-06-03 05:57:39

您的问题没有明确定义,这里有两个满足您的标准的解决方案,但它们看起来都不像您想要的输出:

代码语言:javascript
复制
library(data.table)

data <- setDT(data.frame(name=c(NA, "bob1", "bob", "jack", "bob1", "bob"), ID=c(1,1,4,3,2,1)))    
data <- na.omit(data) # remove NAs
data$ID <- data$ID[match(data$name,data$name)] # harmonize ids
data$name <- data$name[match(data$ID,data$ID)] # harmonize names
data
#    name ID
# 1: bob1  1
# 2:  bob  4
# 3: jack  3
# 4: bob1  1
# 5:  bob  4


data <- setDT(data.frame(name=c(NA, "bob1", "bob", "jack", "bob1", "bob"), ID=c(1,1,4,3,2,1)))
data <- na.omit(data) # remove NAs
data$name <- data$name[match(data$ID,data$ID)] # harmonize names
data$ID <- data$ID[match(data$name,data$name)] # harmonize ids
data
#    name ID
# 1: bob1  1
# 2:  bob  4
# 3: jack  3
# 4: bob1  1
# 5: bob1  1
票数 1
EN

Stack Overflow用户

发布于 2018-06-03 16:49:51

一种选择是使用mapplyorderdata.table没有做任何特别的事情,因此我更喜欢使用data.frame

代码语言:javascript
复制
data <- data.frame(name=c(NA, "bob1", "bob", "jack", "bob1", "bob"), 
                   ID=c(1,1,4,3,2,1), stringsAsFactors =  FALSE)

# First order on ID
data[order(data$ID),]

as.data.frame(t(mapply(function(x,y){
  data[which(!is.na(data$name) & ((!is.na(y) & y==data$name) | x == data$ID))[1],]

}, data$ID, data$name)))

#   name ID
# 1 bob1  1
# 2 bob1  1
# 3 bob1  1
# 4 bob1  1
# 5 jack  3
# 6 bob1  1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50660859

复制
相关文章

相似问题

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