У меня есть такой фрейм данных:
Я хотел бы сравнить строку в каждом идентификаторе и для каждого столбца с одинаковыми значениями добавить одну точку в столбец «Итого».
Выход:
Я пробовал это:
df <- df %>%
group_by(ID) %>%
mutate(change = ifelse(col1 == lag(col1), 1, 0))
Но это не сработало.
library(dplyr) #version 1.1.0 and above
df %>%
mutate(Total = sum(across(col1:Col2, ~ n_distinct(.x) == 1)), .by = ID)
ID col1 Col2 Total
1 AB 1 3 2
2 AB 1 3 2
3 CD 2 4 1
4 CD 2 3 1
5 EF 5 10 0
6 EF 1 1 0
7 GH 5 10 1
8 GH 1 10 1
Ниже 1.1.0:
df %>%
group_by(ID) %>%
mutate(Total = sum(across(col1:Col2, ~ n_distinct(.x) == 1))) %>%
ungroup()
Спасибо, но у меня ошибка "через" Должен использоваться внутри глаголов dplyr.
Как отмечает Mael, вам необходимо убедиться, что у вас установлена версия dplyr 1.1.0, иначе вы получите это сообщение об ошибке. Справку по обновлению dplyr см. здесь: sparkbyexamples.com/r-programming/install-and-update-r-packages
У вас была ошибка с вашим существующим кодом?