Проверить несколько столбцов, если совпадают значения в R данных - PullRequest
1 голос
/ 15 мая 2019

Привет, я уже знаю строки и столбцы после сопоставления условия следующим образом: Мой набор данных:

Power | Channel | Speed | Speed2 | Speed3 
50    | 1       | 400   | 200    | 100
50    | 6       | 400   | 500    |  80
50    | 6       | 400   | 500    | 800

и я хочу создать новый столбец, где он соответствует моим условиям, где, если скорость всех столбцов> = 100, вернуть эти строки. Например:

Power | Channel | Speed | Speed2 | Speed3 | Flag
50    | 1       | 400   | 200    | 100    |  1
50    | 6       | 400   | 500    |  80    |  1

Я уже знаю возвращаемые строки и столбцы, используя этот код:

which(blk13fullpower <= 100, arr.ind = TRUE)

, который дает вывод:

         row col 
   [1,]   1   1 
   [2,]   2   1
   [3,]   3   1
   [4,]   4   1
   [5,]   5   1
   [6,]   6   1
   [7,]   7   1

Однако я не знаю, как пометить мой фрейм данных на основе моих результатов. Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Существуют различные способы сделать это

cols <- grep("^Speed", names(df))
df[rowSums(df[cols] <= 100, na.rm = TRUE) > 0, ]

с apply

df[apply(df[cols] <= 100, 1, any), ]

Или с dplyr

library(dplyr)
df %>% filter_at(vars(starts_with("Speed")), any_vars(. <= 100))

Если вы хотите добавить новый столбец с flag = 1 с решениями base R, вы можете использовать transform

transform(df[rowSums(df[cols] <= 100, na.rm = TRUE) > 0, ], flag = 1)

или mutate с dplyr

df %>%  
  filter_at(vars(starts_with("Speed")), any_vars(. <= 100)) %>%
   mutate(flag = 1)
1 голос
/ 15 мая 2019

Попробуйте ifelse

blk13fullpower$flag <- ifelse ( blk13fullpower$Speed >100 & blk13fullpower$Speed2 > 100 & blk13fullpower$Speed3 >100 , 1 , 0)

Это проще, если вы предоставите некоторые данные с помощью команды dput.

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