Hello,

You can easily make of the following a one-liner. Note that the order of rows is not the same as in your code, so identical() will return FALSE.


idx <- Dat[, 'AA'] == "A" | (Dat[, 'AA'] == "B" & Dat[, 'BB'] == "b")
res2 <- Dat[idx, ]


Hope this helps,

Rui Barradas

Em 24-04-2013 11:21, Christofer Bogaso escreveu:
Hello again,

Let say I have following data:

Dat <- structure(list(AA = structure(c(3L, 1L, 2L, 1L, 2L, 3L, 3L, 2L,
3L, 1L, 1L, 3L, 3L, 2L, 2L, 3L, 2L, 1L, 1L, 1L), .Label = c("A",
"B", "C"), class = "factor"), BB = structure(c(2L, 3L, 2L, 2L,
2L, 3L, 2L, 2L, 2L, 1L, 1L, 2L, 3L, 1L, 3L, 2L, 1L, 2L, 2L, 3L
), .Label = c("a", "b", "c"), class = "factor"), CC = 1:20), .Names = c("AA",
"BB", "CC"), row.names = c(NA, -20L), class = "data.frame")

Now I want to select a subset of that 'Dat', for which:
1. First column will contain ALL "A"
2. First column will contain those "B" for which "BB = b" in second column.

Therefore I tries following:

Only_A <- Dat[Dat[, 'AA'] == "A", ]
Only_B <- Dat[Dat[, 'AA'] == "B", ]
rbind(Only_A, Only_B[Only_B[, 'BB'] == "b", ])
    AA BB CC
2   A  c  2
4   A  b  4
10  A  a 10
11  A  a 11
18  A  b 18
19  A  b 19
20  A  c 20
3   B  b  3
5   B  b  5
8   B  b  8


However I believe there must be some better code to achieve that which
is tidier, i.e. there must be some 1-liner code.

Can somebody suggest any better approach if possible?

Thanks and regards,

______________________________________________
R-help@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.


______________________________________________
R-help@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.

Reply via email to