Я не могу заставить свой код работать, когда я хочу создать новый столбец с одним целым числом из нескольких условий из нескольких столбцов.
У меня есть 4 переменные: pun1, pun2, pun3, pun4.
Я хочупреобразовать эти строки в зависимости от условий в новый столбец (pun_severity_out
) и присвоить ему 1, если все условия выполняются.Всякий раз, когда условие не соответствует действительности, целое число должно измениться на pun_severity_out = 0
. Дело в том, что pun1 и pun2 сгруппированы вместе, как и pun3 и pun4.
Всякий раз, когда есть NAэто означает, что этот человек был оценен другими (вы не можете наказать себя).Поскольку эти Ss сгруппированы, у нас есть ingroup и outgroup.Так что если pun1 == NA
, это означает, что внешняя группа - pun3
& pun4
.Для ясности, если pun3 == NA
, то внешняя группа будет pun1
& pun2
.
. Я хочу добиться, чтобы все значения 4 или выше для обоих членов внешней группы вбыть объединены в одно значение, 1. Но только если в другой группе присутствует NA, потому что мы специально хотим, чтобы члены внешней группы.
Редактировать: пример данных
UniqueSS subject group part round treatment pun1 pun2 pun3 pun4 severity_pun_out
1 11 1 1 punishment 0 homogenous NA 0 0 0 0
2 12 2 1 punishment 0 homogenous 0 NA 0 0 0
3 13 3 1 punishment 0 homogenous 0 0 NA 0 0
4 14 4 1 punishment 0 homogenous 0 0 1 NA 0
5 11 1 1 punishment 1 homogenous NA 0 0 0 0
6 12 2 1 punishment 1 homogenous 0 NA 0 0 0
7 13 3 1 punishment 1 homogenous 0 0 NA 0 0
8 14 4 1 punishment 1 homogenous 0 0 0 NA 0
9 11 1 1 punishment 2 homogenous NA 0 0 0 0
10 12 2 1 punishment 2 homogenous 0 NA 5 4 1
Моя лучшая попытка заключается в следующем, но это дает NA при использовании большего количества ifelse () внутри одного и того же оператора:
df5$severity_pun_out <- with(df5, ifelse(pun1 == NA & pun3 >= 4 & pun4 >= 4, 1, ifelse(pun2 == NA & pun3 >= 4 & pun4 >= 4, 1, ifelse(pun3 == NA & pun1 >= 4 & pun2 >= 4, 1, ifelse(pun4 == NA & pun1 >= 4 & pun2 >= 4, 1, 0 )))))
1) Если pun1 == NA
, то pun3
&pun4
является внешней группой.
2) Тогда, если значения pun3
& pun4
равны или превышают 4, поместите 1 в этой строке для (нового) столбца pun_severity_out
.
Я думаю, что НС вызывают некоторый шум, но это просто условие, которое должно быть выполнено.Я не уверен, как решить эту проблему, потому что я просто призываю 1
не преобразовывать какие-либо NA.
Должен ли я вызвать конкретную строку с этим конкретным NA, а затем применить преобразование внешней группы?Я предполагаю, что это то, что я делаю с ifelse (), потому что мы специально используем строку с этим конкретным NA.
Код (или функция) предпочтительно короткий, простой и общеприменимый и не взаимодействует снабор данных (за исключением возможного создания столбца pun_severity_out ).Я мог бы хотеть изменить значение отсечения на 3, поэтому изменение кода не должно быть больше, чем изменение значения.
Я не часто использую dplyr, но если это намного лучше / проще /Я буду использовать его быстрее.
Дополнительный вопрос
Бонусные баллы, если вы можете выделить ингруппу pun(X)
из 4 переменных и поместить ее целое число в новый столбец с именем pun_severity_in
,Например, если pun1 == NA
, добавьте pun2
в строку столбца pun_severity_in
.
Использованные источники
Как создать столбец на основе нескольких условий?
Как создать новый столбец на основе нескольких условий из нескольких столбцов?
https://stats.stackexchange.com/questions/115162/filtering-a-dataframe-in-r-based-on-multiple-conditions
Спасибо взаранее