R 根据两个变量匹配数据帧行(索引)

R 根据两个变量匹配数据帧行(索引),r,join,merge,dataframe,R,Join,Merge,Dataframe,我基本上是在尝试将杂乱无章的数据转换成线性建模的长格式 我有两个数据帧“rec”和“book” “book”中的每一行都需要根据行中两个匹配的变量“MRN”和“COURSE”粘贴到“rec”的几行末尾 我尝试了以下方法,但均无效: i=1 newlist=list() colnames(newlist)=colnames(book) for ( i in 1:dim(rec)[1]) { mrn=as.numeric(as.vector(rec$MRN[i])); course=

我基本上是在尝试将杂乱无章的数据转换成线性建模的长格式

我有两个数据帧“rec”和“book”

“book”中的每一行都需要根据行中两个匹配的变量“MRN”和“COURSE”粘贴到“rec”的几行末尾

我尝试了以下方法,但均无效:

i=1
newlist=list()
colnames(newlist)=colnames(book)
for ( i in 1:dim(rec)[1]) {
    mrn=as.numeric(as.vector(rec$MRN[i]));
    course=as.character(rec$COURSE[i]);
get.vector<-as.vector(((as.numeric(as.vector(book$MRN))==mrn) & (as.character(book$COURSE)==course)))
newlist[i]<-book[get.vector,] 
i=i+1;
}
i=1
newlist=list()
colnames(newlist)=colnames(book)
对于(1中的i:dim(rec)[1]){
mrn=as.numeric(as.vector(rec$mrn[i]);
course=as.character(rec$course[i]);

get.vector我创建了一个简单的示例,可能会对您有所帮助。在我的示例中,我希望根据变量x1和x2,在df2的每一行中粘贴来自df1的“value”列:

df1 <- read.table(textConnection("
x1 x2 value
1 2 12
1 3 56
2 1 35
2 2 68
"),header=T)

df2 <- read.table(textConnection("
test x1 x2
1 1 2
2 1 3
3 2 1
4 2 2
5 1 2
6 1 3
7 2 1
"),header=T)

library(sqldf)
sqldf("select df2.*, df1.value from df2 join df1 using(x1,x2)")

  test x1 x2 value
1    1  1  2    12
2    2  1  3    56
3    3  2  1    35
4    4  2  2    68
5    5  1  2    12
6    6  1  3    56
7    7  2  1    35

df1听起来您需要
合并这两个数据帧。请尝试以下操作:

merge(rec, book, by = c('MRN', 'COURSE'))

请阅读
merge
(通过在R控制台上执行
?merge
)的帮助,以了解有关如何合并这些内容的更多选项。

最后一条语句可以缩短为
sqldf(“使用(x1,x2)从df2、df1中选择*)
。m1