Hi,

I am trying to display / print certain columns in my data frame that share
certain condition (for example, part of the column name). I am using for
loop, as follow:

# below is the sample data structure
all.data <- data.frame( NUM_A = 1:5, NAME_A = c("Andy", "Andrew", "Angus",
"Alex", "Argo"),
                        NUM_B = 1:5, NAME_B = c(NA, "Barn", "Bolton",
"Bravo", NA),
                        NUM_C = 1:5, NAME_C = c("Candy", NA, "Cecil",
"Crayon", "Corey"),
                        NUM_D = 1:5, NAME_D = c("David", "Delta", NA, NA,
"Dummy") )

col_names <- c("A", "B", "C", "D")

> all.data
  NUM_A NAME_A NUM_B NAME_B NUM_C NAME_C NUM_D NAME_D
1     1   Andy     1   <NA>     1  Candy     1  David
2     2 Andrew     2   Barn     2   <NA>     2  Delta
3     3  Angus     3 Bolton     3  Cecil     3   <NA>
4     4   Alex     4  Bravo     4 Crayon     4   <NA>
5     5   Argo     5   <NA>     5  Corey     5  Dummy
>

Then for each col_names, I want to display the columns:

for (each_name in col_names) {

        sub.data <- subset( all.data,
                            !is.na( paste("NAME_", each_name, sep = '') ),
                            select = c( paste("NUM_", each_name, sep = '') ,
paste("NAME_", each_name, sep = '') )
                          )
        print(sub.data)
}

the "incorrect" result:

NUM_A NAME_A
1     1   Andy
2     2 Andrew
3     3  Angus
4     4   Alex
5     5   Argo
  NUM_B NAME_B
1     1   <NA>
2     2   Barn
3     3 Bolton
4     4  Bravo
5     5   <NA>
  NUM_C NAME_C
1     1  Candy
2     2   <NA>
3     3  Cecil
4     4 Crayon
5     5  Corey
  NUM_D NAME_D
1     1  David
2     2  Delta
3     3   <NA>
4     4   <NA>
5     5  Dummy
>

What I want to achieve is that the result should only display the NUM and
NAME that is not NA. Here, the NA can be NULL, or zero (or other specific
values).

the "correct" result:

NUM_A NAME_A
1     1   Andy
2     2 Andrew
3     3  Angus
4     4   Alex
5     5   Argo
  NUM_B NAME_B
 2     2   Barn
3     3 Bolton
4     4  Bravo
   NUM_C NAME_C
1     1  Candy
 3     3  Cecil
4     4 Crayon
5     5  Corey
  NUM_D NAME_D
1     1  David
2     2  Delta
5     5  Dummy
>

I am guessing that I don't use the correct type on the following statement
(within the subset in the loop):
!is.na( paste("NAME_", each_name, sep = '') )

But then, I might be completely using a wrong approach.

Any idea is definitely appreciated.

Thank you,

Ferry

        [[alternative HTML version deleted]]

______________________________________________
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