[R] If() values in one dataframe then return values from another

Rui Barradas ruipbarradas at sapo.pt
Mon Feb 4 19:19:34 CET 2013


Hello,

Try the following.


mA <- sapply(seq_len(nrow(data1)), function(i) if(any(data1[i,] == 3)) 
meter[i, 1] else NA)


Hope this helps,

Rui Barradas

Em 04-02-2013 17:48, Steven Ranney escreveu:
> 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
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list