2014-06-17 123 views
0

我有三个R数据以下列格式的条件下,ř子集data.frame与来自其它data.frames

数据1

ID V2 V2.1 V2.2 V2.3 ...V2.101 

0 54 40 50 55  43 
1 20 35 14 40  13 
2 10 33 8 44  8 

. . . . .  . 
. . . . .  . 
99 8 38 10 50  10 

数据2

ID V2 V2.1 V2.2 V2.3 ...V2.101 

0 1.5 1.5 1.4 1.3  1.5 
1 1.3 3  3  1.5  3 
2 1.5 4  4  1.8  5 

.  .  . .  .  . 
.  .  . .  .  . 
99 1.4 12 8 1.9  8 

数据3

ID V2 V2.1 V2.2 V2.3 ...V2.101 

0 1.4 1.3 1.3 1.2  1.2 
1 1.4 3.1 3.2  1.4  4 
2 1.3 4  4.2  1.3  3 

.  .  . .  .  . 
.  .  . .  .  . 
99 1.2 10 7.5 1.6  9 

data1中的V2到V101表示对于data1中的每个ID值以及对于数据2中的每个ID值进行100次相同的观察(角度),并且将数据2中的V2到V101表示为类似观测值的结合。我想从data1中提取ID和变量(角度)值,如果变量(角度)值小于30,则相应的值在data2或data3中小于1.5。基本上我想要角度小于30的提取数据,并且任一键都小于1.5。

所需的输出应该有ID和可变折射率,角度(从DATA1)和Bond(最小键从DATA2和DATA3应报告)

ID Variable Angle Bond 

10  V2.5  29  1.5 
40  V2.36 13  1.3 
50  V2.99  8  1.4 
..  ..  ..  1.0 

我与子集命令试过,

my.data<-subset(data1, V2<30) 

但我不知道如何包括所有的V2值(V2 TO V2.101),并且还从data2和data3中添加条件。

+0

你可以发布一些样本数据帧的预期输出吗? – josliber

+0

您有多个条件需要满足每行。例如,row1,V2可能会满足您的条件,但V2.1可能不会。你如何处理这种情况?输出在这里很有用。 – asb

+0

请同时使用'dput',以便用户不必花费很长时间来创建与您的输入/输出相匹配的示例。 – JPC

回答

0
library(reshape2) 
library(plyr) 
d1 <- melt(df1, id.var='ID', value.name = "angle") 
d2 <- melt(df2, id.var='ID', value.name = "bond") 
d3 <- melt(df3, id.var='ID', value.name = "bond2") 

dall <- join_all(list(d1,d2,d3), by= c('ID', 'variable')) 
dall2 <- melt(dall, id.var = c('ID', 'variable', 'angle'), value.name = "bond") 
subset(dall2, angle < 30 & bond < 1.5) 

    ID variable angle variable.1 bond 
2 1  V2 20  bond 1.3 
17 1  V2 20  bond2 1.4 
18 2  V2 10  bond2 1.3