[R] If() values in one dataframe then return values from another
Steven Ranney
steven.ranney at gmail.com
Mon Feb 4 18:48:16 CET 2013
I have a large data frame ("data1") that looks like:
A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A20
[1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
[2,] 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0
[3,] 1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0
[4,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 2
[5,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 2 0 2
[6,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2
[7,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[8,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[9,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[10,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[11,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[12,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[13,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[14,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[15,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[16,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2
[17,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2
[18,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2
[19,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 2
[20,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[22,] 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0
[23,] 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 2 0 0 0 2
[24,] 0 0 1 2 0 0 0 2 0 0 1 1 0 1 0 1 0 0 2 2
[25,] 0 1 1 2 0 2 2 2 1 1 1 1 0 1 1 1 1 0 2 2
[26,] 1 1 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2
[27,] 1 1 1 1 1 2 1 2 1 1 1 1 2 1 1 1 1 2 2 2
[28,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[29,] 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 2 2 2
[30,] 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 2 1 2 2 2
[31,] 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 1 1 2 2 2
[32,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[33,] 1 1 1 1 1 3 3 3 3 1 3 3 1 1 2 1 1 2 2 2
[34,] 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 2 2
[35,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2
[36,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[37,] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[38,] 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0
[39,] 0 0 0 0 0 0 0 0 0 2 0 0 2 0 0 2 0 0 0 2
[40,] 1 1 2 1 1 2 1 2 2 2 2 2 2 1 1 1 1 2 3 2
(data1 is actually 1,080 rows long.)
If there is a "3" in any row above, I'd like to be given the values
from a second data frame ("meter"):
meter
1 20
2 19
3 18
4 17
5 16
6 15
7 14
8 13
9 12
10 11
11 10
12 9
13 8
14 7
15 6
16 5
17 4
18 3
19 2
20 1
21 20
22 19
23 18
24 17
25 16
26 15
27 14
28 13
29 8
30 7
31 6
32 2
33 1
34 10
35 4
36 3
37 2
38 18
39 17
40 15
(meter is actually 1,080 rows long)
If there is no "3" row i of data1, I'd like to R to return "NA".
I've tried
for(i in 1:40){
if( (any(data1[i,] == 3)) ) mA <- meter[i,] else mA <- NA
}
But I'm given:
> mA
[1] 15
Levels: 1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9
Can anyone give me some additional ideas to try?
Thanks -
SR
Steven H. Ranney
More information about the R-help
mailing list