Извлечь все строки в Dataframe со значениями 0 и 0,00% - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть данные следующим образом.

df <- data.frame(Type=c(1,2,3,4,5), Category1=c(0,1,0,1,0), Category2=c("0.00 %", "1.00 %", "1.00 %", "1.00 %","0.00 %"), Category3=c(0,1,1,0,0),Category4=c("0.00 %", "1.00 %", "1.00 %", "1.00 %","1.00 %"))

Я хочу проверять только те строки с 0 и 0,00%.

a <- df[which(df[,2:ncol(df)] == 0),1]
b <- df[which(df[,3:ncol(df)] == sprintf("%.2f %%", 100*0)),1]
intersect(a,b)

Кажется, 2:ncol(df) не работает.

Ожидаемый результат, возвращение пересечения (a, b) должно быть только 1.

enter image description here

1 Ответ

0 голосов
/ 22 февраля 2020

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

apply(df %>% select(-Type), 1, function(r) all(r %in% c(0, sprintf("%.2f %%", 100*0))))

дает вам: TRUE FALSE FALSE FALSE FALSE

сохранение его в формате df

df1 <- df %>% 
  mutate(all_zero = apply(df %>% select(-Type), 1, function(r) all(r %in% c(0, sprintf("%.2f %%", 100*0)))))

, что дает:

 Type Category1 Category2 Category3 Category4  all_zero
1    1         0    0.00 %         0    0.00 %  TRUE
2    2         1    1.00 %         1    1.00 % FALSE
3    3         0    1.00 %         1    1.00 % FALSE
4    4         1    1.00 %         0    1.00 % FALSE
5    5         0    0.00 %         0    1.00 % FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...