R子集data.frame与其他data.frames的条件

时间:2014-06-17 14:58:13

标签: r subset

我有三种具有以下格式的R数据,

数据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

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

所需的输出应具有ID和变量索引,Angle(来自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中提取条件。

1 个答案:

答案 0 :(得分: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