2012-05-11 43 views
0

我正在处理两个不同的数据集,并且希望将数据从一个数据集移到另一个数据集。我这样想:一个包含结果,与正确的因子(HTm)配对,我想把它们分散到另一个框架中。这是第一个帧:将结果从一个数据框移动到数据集

head(five) 
    Week  Game.ID  VTm VPts HTm HPts HDifferential VDifferential 
    1 1 [email protected] OAK 20 NE 30  10   -10 
    2 1 [email protected] ARI 19 NYG 42   23   -23 
    3 1 [email protected] CHI 7 WAS 9    2   -2 
    4 1 [email protected] CIN 27 CLE 13   -14   14 
    5 1 [email protected] DAL 28 SD 24   -4    4 
    6 1 [email protected] DEN 10 MIA 34   24   -24 
    VTm.f HTm.f average 
    1 OAK NE 19.4375 
    2 ARI NYG 19.4375 
    3 CHI WAS 19.4375 
    4 CIN CLE 19.4375 
    5 DAL SD 19.4375 
    6 DEN MIA 19.4375 

    > tail(five) 
     Week    Game.ID VTm VPts HTm HPts HDifferential VDiff 
    262 19 [email protected] WAS 10 SEA 20   10 -10 
    263 19 [email protected] CAR 29 CHI 21   -8  8 
    264 19 [email protected] PIT 21 IND 18   -3  3 
    265 20 [email protected] CAR 14 SEA 34   20 -20 
    266 20 [email protected] PIT 34 DEN 17   -17  17 
    267 21 [email protected] SEA 10 PIT 21   11 -11 
      VTm.f HTm.f average 
     262 WAS SEA  0 
     263 CAR CHI  0 
     264 PIT IND  0 
     265 CAR SEA  0 
     266 PIT DEN  0 
     267 SEA PIT  0 

和这里是其他(聚集来自第一帧的装置)。

head(fiveINFO) 
    HTm  HPts  VPts average 
    1 ARI 19.87500 19.00000 19.43750 
    2 ATL 24.75000 19.12500 21.93750 
    3 BAL 19.37500 13.75000 16.56250 
    4 BUF 16.50000 17.37500 16.93750 
    5 CAR 25.12500 23.27273 24.19886 
    6 CHI 18.77778 14.00000 16.38889 

    tail(fiveINFO) 
    VTm HPts VPts average 
27 SEA 21.00 25.000 23.0000 
28 SF 30.75 12.625 21.6875 
29 STL 28.00 22.000 25.0000 
30 TB 15.75 15.375 15.5625 
31 TEN 28.00 14.750 21.3750 
32 WAS 20.60 18.800 19.7000 

仅供参考,此数据为NFL评分。我想在第五帧中取第二帧的平均值,并在第一帧中将它们移到相应的球队。五个是266行,而五个INFO是32行 - 五个INFO包含每个HTm只有一次,而五个包含每个8-10次,这取决于每个团队所玩的主场比赛数量。我发现了几个似乎相似的答案,但数据集小得多。我不想合并这两个;我希望来自第二帧的平均数据在第一帧中的适当的HTm值上传播。

我想象着我需要使用某种for循环来做这件事,但是我所做的一切都是醒目的。帮帮我?

+1

删除列HPTS,VPTS我奋力理解为什么'合并()'不会做的正是你想要的。你似乎想说的就是这个功能的功能。 – joran

+0

所以像这样的东西不是你想要的?我已经重新创建了数据:'five < - data.frame(HTm = c(“OAK”,“OAK”,“ARI”,“ARI”)); fiveINFO < - data.frame(HTm = c(“OAK “,”ARI“),平均值= 1:2); merge(5,5INFO,by =”HTm“);' – thelatemail

+0

当我使用merge来试图让数据为正确的HTm传播时,所有的都显示成为“ARI”,并将ARI的平均水平定为19.4375。回想起来,我可能只是写错了代码,如下所示:merge(five,fiveINFO [,c(“HTm”,“average”)]) –

回答

1

total<-merge(five, fiveINFO, by="HTm")

其中总是具有从5和fiveINFO合并列基于HTM列中的数据帧。不匹配五个和五个INFO的htm值不会被填充。但是,如果您希望填充NA,则可以明确地执行此操作(在合并函数中使用此选项:all=TRUE,all.x或all.y = TRUE)。

您还可以删除合并后不需要的多余列。

total=subset(total,select= -c(HPts,VPts)) #for从合并的数据帧

+0

感谢您的帮助!快速的问题:当我尝试的代码,我得到了以下错误: 错误fix.by(by.y,y):'通过'必须指定有效的列 任何想法我可以解决这个问题?它们肯定是有效的列... –

+0

请确保在两个数据框中的列名是“HTm” - 五个和五个INFO。 R区分大小写。或者如果在两个数据集中没有任何公共列名称,则使用(...,by.x =“dataframe 5中的列名”,by。y =“数据帧fiveINFO中的列名”) – Subs

+0

第二个数据帧中的“HTm”和“VTm”是两个独立的列吗?您的头部和尾部信息与第二个数据帧的列名称不匹配。确保在合并时使用正确的列名称。 (如果两个数据框都包含相同的列名,则使用'by'或者使用by.x和By.y来合并) – Subs

相关问题