R 将数据从一个数据帧匹配到另一个数据帧
首先,如果这个问题的措辞不尽可能好,我表示歉意。我对这个问题不熟悉,但我试图把问题说清楚。我正在努力实现以下目标 我有两个数据帧,试图从其中一个帧中获取数据,并将其添加到另一个帧中的新列中,我在下面创建了一个示例R 将数据从一个数据帧匹配到另一个数据帧,r,R,首先,如果这个问题的措辞不尽可能好,我表示歉意。我对这个问题不熟悉,但我试图把问题说清楚。我正在努力实现以下目标 我有两个数据帧,试图从其中一个帧中获取数据,并将其添加到另一个帧中的新列中,我在下面创建了一个示例 IDa <- c(1,2,3) score1a <- c(5,10,1) score2a <- c(NA,8,NA) score3a <- c(NA,NA,13) dfa <- data.frame(IDa,score1a,score2a,score3a
IDa <- c(1,2,3)
score1a <- c(5,10,1)
score2a <- c(NA,8,NA)
score3a <- c(NA,NA,13)
dfa <- data.frame(IDa,score1a,score2a,score3a)
IDb <- c(1,1,1,2,2,3)
timeb <- c(1,2,3,2,3,3)
dfb <- data.frame(IDb,timeb)
IDa您可以将dfa
融化为long
表单,然后在转换变量
列以匹配timeb
后,将与dfb
合并
library(reshape2)
merge(dfb,transform(melt(dfa, id.var='IDa', na.rm=TRUE),
variable=as.numeric(factor(variable))),
by.x=c('IDb', 'timeb'), by.y=c('IDa', 'variable'), all.x=TRUE)
# IDb timeb value
#1 1 1 5
#2 1 2 NA
#3 1 3 NA
#4 2 2 8
#5 2 3 NA
#6 3 3 13
或者将列名更改为,然后执行merge
colnames(dfa)[-1] <- 1:3
merge(dfb, melt(dfa, id.var='IDa'),
by.x=c('IDb', 'timeb'), by.y=c('IDa', 'variable'))
colnames(dfa)[-1]您可以melt
dfa
到long
表单,然后merge
在转换变量
列以匹配timeb
后使用dfb
进行合并
library(reshape2)
merge(dfb,transform(melt(dfa, id.var='IDa', na.rm=TRUE),
variable=as.numeric(factor(variable))),
by.x=c('IDb', 'timeb'), by.y=c('IDa', 'variable'), all.x=TRUE)
# IDb timeb value
#1 1 1 5
#2 1 2 NA
#3 1 3 NA
#4 2 2 8
#5 2 3 NA
#6 3 3 13
或者将列名更改为,然后执行merge
colnames(dfa)[-1] <- 1:3
merge(dfb, melt(dfa, id.var='IDa'),
by.x=c('IDb', 'timeb'), by.y=c('IDa', 'variable'))
colnames(dfa)[-1]另一个选项是:
require(dplyr)
require(tidyr)
gather(dfa, Score, Val, -IDa) %>%
mutate(Score = as.numeric(gsub("[a-zA-Z]","", Score))) %>%
left_join(dfb, ., by = c("IDb" = "IDa", "timeb" = "Score"))
# IDb timeb Val
#1 1 1 5
#2 1 2 NA
#3 1 3 NA
#4 2 2 8
#5 2 3 NA
#6 3 3 13
这些步骤与akrun的答案类似,但使用的功能不同。另一个选项是:
require(dplyr)
require(tidyr)
gather(dfa, Score, Val, -IDa) %>%
mutate(Score = as.numeric(gsub("[a-zA-Z]","", Score))) %>%
left_join(dfb, ., by = c("IDb" = "IDa", "timeb" = "Score"))
# IDb timeb Val
#1 1 1 5
#2 1 2 NA
#3 1 3 NA
#4 2 2 8
#5 2 3 NA
#6 3 3 13
这些步骤与akrun的答案类似,但使用不同的功能。你真的有dplyr
像pro一样向下你真的有dplyr
像pro一样向下