Присвойте значение в столбце по группе R - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть данные, которые выглядят так:

data <- data.frame(stringsAsFactors=FALSE,
          id = c(1, 1, 2, 2, 3, 3, 3, 4),
      rating = c("No rating", "Red", "No rating", "Red", "Green", "Red",
                 "No rating", "Green"),
         pct = c(10.34079909, 89.65920091, 91.28335721, 8.71664279, 21, 83, 2,
                 10)

Я пытаюсь создать новую переменную с именем flag, чтобы определить, когда группа id удовлетворяет определенному условию. Например:

data %>%
  group_by(id) %>%
    mutate(flag = case_when(
    pct > .05 & rating == "Red" ~ TRUE,
    TRUE ~ FALSE)) 

После того, как условие флага выполнено, я хочу, чтобы все значения в flag были TRUE для этого параметра c id, а не только для строк, в которых это условие встретил

1 Ответ

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

Я не знаком с dplyr, но это работает, если я правильно понимаю вопрос

data <- data.frame(stringsAsFactors=FALSE, id = c(1, 1, 2, 2, 3, 3, 3, 4), rating = c("No rating", "Red", "No rating", "Red", "Green", "Red", "No rating", "Green"), pct = c(10.34079909, 89.65920091, 91.28335721, 8.71664279, 21, 83, 2, 10))

data$bin <- ifelse(data$pct > .05 & data$rating == "Red", TRUE, FALSE)
df       <- merge(data, aggregate(data=data, bin~id, max), by.x="id", by.y = "id")

head(df)

id    rating       pct bin.x bin.y
1  1 No rating 10.340799 FALSE     1
2  1       Red 89.659201  TRUE     1
3  2 No rating 91.283357 FALSE     1
4  2       Red  8.716643  TRUE     1
5  3     Green 21.000000 FALSE     1
6  3       Red 83.000000  TRUE     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...