#r
#r
Вопрос:
У меня возникли некоторые проблемы с R, и я был бы признателен вам за помощь. У меня есть фрейм данных с двумя переменными: YearsElapsed и YearsWithout. Первый имеет значения от -30 и от -21 до 12; второй от -12 до 129.
Мне нужно изменить значение YearsWithout на -30, когда yearswithout> 30 и соответствующие YearsElapsed=-30. (Это значение указывает, что наблюдение является частью моей контрольной группы.) Я пытался
for (i in 1:5){
if(event_data$YearsElapsed[i]==-30 amp; event_data$YearsWithout[i]>=30 {
event_data$YearsWithout[i]==-30
}
}
но это ничего не изменило.
Предположим, что event_data имеет в качестве столбцов YearsElapsed=c(-30,0,2,14,5) и YearsWithout=c(43,5,16,60,2), а также другие ковариаты. (К сожалению, я не смог загрузить данные.)
Ответ №1:
Используя case_when и мутировать из пакета dplyr:
YearsElapsed=c(-30,0,2,14,5)
YearsWithout=c(43,5,16,60,2)
df=data.frame(YearsElapsed, YearsWithout)
library(dplyr)
df=mutate(df, YearsWithout=case_when(YearsElapsed==-30 amp; YearsWithout >= 30 ~ -30,
TRUE ~ YearsWithout))
Вывод:
> df
YearsElapsed YearsWithout
1 -30 -30
2 0 5
3 2 16
4 14 60
5 5 2
Комментарии:
1. Спасибо за вашу помощь. Это решило мою проблему!
Ответ №2:
Вам не нужен for
цикл для такого рода операций, найдите подмножество данных, которые вы хотите изменить, и замените значения.
event_data$YearsWithout[event_data$YearsWithout >= 30 amp; event_data$YearsElapsed ==-30] <- -30
event_data
# YearsElapsed YearsWithout
#1 -30 -30
#2 0 5
#3 2 16
#4 14 60
#5 5 2
данные
event_data <- data.frame(YearsElapsed=c(-30,0,2,14,5),
YearsWithout=c(43,5,16,60,2))
Комментарии:
1. Спасибо за вашу помощь. Это решило мою проблему!
Ответ №3:
Пожалуйста, попробуйте использовать =-
вместо ==-
. Вычисляет event_data$YearsWithout[i]==-30
условие, в то время event_data$YearsWithout[i]=-30
как присваивает значение.
if(event_data$YearsElapsed[i]==-30 amp; event_data$YearsWithout[i]>=30 {
event_data$YearsWithout[i] <- -30
}
}
Комментарии:
1. Хороший улов двойного знака равенства. 1
2. Я сам совершенно пропустил это мимо ушей. Спасибо!