У меня есть следующие данные:
Group Hormone Damage Score Greater
1 B control damaged 4 1
2 B control undamaged 4 1
3 B JA damaged 2 0
4 B JA undamaged 3 0
5 D control damaged 2 0
6 D control undamaged 1 0
7 D JA damaged 4 1
8 D JA undamaged 3 1
Я создал колонку «Большой» вручную. По сути, он спрашивает: «В какой группе значение поврежденного балла больше?» Чем больше значение присваивается 1, тем меньше 0.
Как мне создать код, чтобы сделать это для меня? Я попытался с помощью следующего кода dplyr, но безуспешно:
df%>% group_by(Group) %>%
mutate(Greater1 = if_else(Score>Score, 0,1))
Если этот вопрос уже задавался, пожалуйста, дайте мне знать, потому что я не могу найти похожий.
3 ответа
Если у вас нет проблем со связями, вы можете просто сделать
library(tidyverse)
df %>%
group_by(Group, Damage) %>%
mutate(new = as.integer(Score == max(Score)))
Который дает
# A tibble: 8 x 6 # Groups: Group, Damage [4] Group Hormone Damage Score Greater new <chr> <chr> <chr> <int> <int> <int> 1 B control damaged 4 1 1 2 B control undamaged 4 1 1 3 B JA damaged 2 0 0 4 B JA undamaged 3 0 0 5 D control damaged 2 0 0 6 D control undamaged 1 0 0 7 D JA damaged 4 1 1 8 D JA undamaged 3 1 1
Базовая опция R с использованием ave
df$Greater <- with(df, as.numeric(Score == ave(Score, Group, Damage, FUN = max)))
df
# Group Hormone Damage Score Greater
#1 B control damaged 4 1
#2 B control undamaged 4 1
#3 B JA damaged 2 0
#4 B JA undamaged 3 0
#5 D control damaged 2 0
#6 D control undamaged 1 0
#7 D JA damaged 4 1
#8 D JA undamaged 3 1
Который также можно записать как
df$Greater <- with(df, ave(Score, Group, Damage, FUN = function(x) x == max(x)))
Или продолжить подход if_else
, который вы пытались
library(dplyr)
df%>%
group_by(Group, Damage) %>%
mutate(Greater1 = if_else(Score==max(Score), 1,0))
Использование data.table
library(data.table)
setDT(df)[, new := as.integer(Score == max(Score)), .(Group, Damage)]
Похожие вопросы
Новые вопросы
r
R - это свободный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальный и воспроизводимый пример (ы) вместе с желаемым результатом. Используйте `dput ()` для данных и укажите все неосновные пакеты с помощью вызовов library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов, связанных со статистикой, используйте https://stats.stackexchange.com.