Удалить строки, которые не более чем в одном столбце - PullRequest
0 голосов
/ 19 февраля 2020
data.frame(id = c(1,2,3,4), text1 = c("sth","","another",""), text2 = c("more","another","add",""), text3 = c("final","and","where",""), stringsAsFactors = FALSE)

Как можно проверить столбцы text1, text2, text3, если во всех них есть ячейки, где ничего не написано, как их удалить?

Пример ожидаемого вывода

data.frame(id = c(1,2,3), text1 = c("sth","","another"), text2 = c("more","another","add"), text3 = c("final","and","where"), stringsAsFactors = FALSE)

Ответы [ 4 ]

3 голосов
/ 19 февраля 2020

Мы можем использовать rowSums

df[rowSums(df == '') < 2, ]
2 голосов
/ 19 февраля 2020

Предложение решения с использованием dplyr:

df <- data.frame(id = c(1,2,3,4),
           text1 = c("sth","","another",""),
           text2 = c("more","another","add",""),
           text3 = c("final","and","where",""),
           stringsAsFactors = FALSE)


library(dplyr)
df %>% 
  filter_at(vars(starts_with("text")), any_vars(!. %in% c("")))

Возвращает:

  id   text1   text2 text3
1  1     sth    more final
2  2         another   and
3  3 another     add where
2 голосов
/ 19 февраля 2020

Вот еще одно базовое решение R, использующее nchar + rowSums

subset(df,rowSums(nchar(as.matrix(df[-1])))>0)

, такое что

  id   text1   text2 text3
1  1     sth    more final
2  2         another   and
3  3 another     add where
2 голосов
/ 19 февраля 2020

Вы можете сделать:

cols <- paste0("text", 1:3)
df[rowSums(df[cols] == "") < length(cols), ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...