фильтровать набор данных при определенных условиях в R - PullRequest
0 голосов
/ 26 марта 2019

у меня есть датафрейм, структурированный так:

 V1 V2 V3 V4 V5 V6 V7 

 A. B. C.    D.    E. 
 C  C. D.    K.             
 A. B. C. D. E. F. G. 

там, где есть пустые клетки.

Я хочу отфильтровать фрейм данных в соответствии с этим условием:

Для каждой строки кадра данных, если есть хотя бы два значения , отличные от пустых значений в столбцах V4, V5, V6, V7 , взять строку. В противном случае удалите его.

 V1 V2 V3 V4 V5 V6 V7 

 A. B. C.    D.    E.     
 A. B. C. D. E. F. G. 

Как я мог это сделать?

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Использование rowSums

df[rowSums((df!='')[,c('V4','V5','V6','V7')])>=2,]
  V1 V2 V3 V4 V5 V6 V7
1 A. B. C.    D.    E.
3 A. B. C. D. E. F. G.
1 голос
/ 26 марта 2019

Вы можете установить подкадр данных, сначала установив индекс, который суммирует логический оператор для каждого столбца, как в примере ниже:

df <- data.frame(V4 = c('A', '', 'C'),
                 V5 = c('A', '', 'C'),
                 V6 = c('A', 'B', ''))

  V4 V5 V6
1  A  A  A
2        B
3  C  C   

df <- df[(df$V4 != '') + (df$V5 != '') + (df$V6 != '') >= 2, ]

Вывод

  V4 V5 V6
1  A  A  A
3  C  C  

Когда высуммируя логические операторы (проверяя, является ли переменная пустой), они генерируют числовое значение, представляющее количество найденных истинных значений.В вашем примере вы хотите установить условие, чтобы хотя бы 2 столбца удовлетворяли условию != ''.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...