I'm using R and stuck at the following problem.
I have a data called data. It has 48 columns. id, title_1, title_2, ..., title_47. id stands for personal id and the other 47 columns include the values either H or L or P or N or "" . Here I mean "" as empty.
My goal is to eliminate the columns that have all empty values. Definitely all the values of id are filled with number. So I think I should make a for sentence for title_1 to title_47 to check whether some of them have all empty values.
CodePudding user response:
You can Filter the columns which have all values "". Here I use an example dataframe where the column title_2 has only "" values:
Filter(function(x)!all(x == ""), df)
Output:
id title_1
1 1 2
2 2 3
3 3 5
Data used as an example:
df <- data.frame(id = c(1,2,3),
title_1 = c(2,3,5),
title_2 = c("", "", ""))
CodePudding user response:
Data from @Quinten(many thanks). Here is a solution with sapply
df <- data.frame(id = c(1,2,3),
title_1 = c(2,3,5),
title_2 = c("", "", ""))
df[, !sapply(df, function(x) all(x == ""))]
id title_1
1 1 2
2 2 3
3 3 5
CodePudding user response:
Another possible solution, based on dplyr (I am using @Quinten's data, to whom I thank):
library(dplyr)
df %>%
select(which(colSums(df != "") != 0))
#> id title_1
#> 1 1 2
#> 2 2 3
#> 3 3 5
