Сгруппируйте по переменной в R и запустите dplyr case_when - PullRequest
0 голосов
/ 03 марта 2020

Я хочу создать новую переменную для каждой группы в моем наборе данных. Я использую этот код:

 data <- data  %>%
  group_by(Set_Number , Set_score) %>%
  mutate(test = case_when(
    lag(data$Serves_In_Fault) == "Serve In" ~ "Second Serve" ,
    lag(data$Serves_In_Fault) == "Fault" ~ "First Serve"
  )
)

, хотя это дает мне ошибку

Ошибка: Столбец test должен иметь длину 93 (размер группы) или единицу, а не 164

Я хочу значение для каждой строки в наборе данных, а не для каждой группы. Пожалуйста, помогите.

1 Ответ

1 голос
/ 03 марта 2020

Проблема в том, что вы квалифицируетесь Servers_In_Fault с data$ перед ним. Таким образом, вы получаете доступ к новой копии всей структуры data, а не структуры data, которая обрабатывается. Вы уже в пределах data, поэтому вам не нужно это делать. Когда вы делаете group_by(), вы имеете дело с подгруппами фрейма данных, по одной за раз. Поэтому, когда вы пытаетесь обработать подгруппу размером 93 и добавляете в нее новую копию data с полными 164 строками, размеры не совпадают. Просто удалите data$ внутри труб, и все будет в порядке.

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