我基本上试图将无组织的数据变成长形式的线性建模。
我有2个data.frames“rec”和“book”
“book”中的每一行都需要根据行中的两个变量粘贴到几行“rec”的末尾:“MRN”和“COURSE”匹配。
我尝试过以下内容并对其进行修改无济于事:
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;
}
如果有人对
有任何建议1)让这个工作 2)使它更优雅(或者可能只是不那么笨拙)
如果我不清楚,请求你的赦免。
我知道我没有合并上面的任何数据,我想如果我能生成一个长格式的data.frame我可以自己组合它们
答案 0 :(得分:7)
听起来你需要merge
这两个数据帧。试试这个:
merge(rec, book, by = c('MRN', 'COURSE'))
并阅读merge
的帮助(通过在R控制台上执行?merge
)以获取有关如何合并这些内容的更多选项。
答案 1 :(得分:2)
我创建了一个可以帮助您的简单示例。在我的情况下,我想根据变量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