Edit: На этот вопрос успешно дан ответ.
У меня есть фрейм данных под названием hispn и вектор квинтилей под названием qq_hispn. Hispn имеет два столбца интересов с именем «FAMINC17», который представляет собой семейный доход, и «Стимуляторы».
Я пытаюсь создать новый столбец под названием «Stim_Income», который имеет другое значение для 5 диапазонов доходов и принимают ли они стимуляторы. Таким образом, если они находятся в диапазоне 0-20% от диапазона дохода и принимают стимуляторы, значение равно 1. Если не принимают стимуляторы, значение равно 6. Значения должны быть 2 и 7 для 20-40%, 3 и 8 на 40-60%, et c. Это позволит мне вычислить распространенность по рецепту (1/6, 2/7, и т. Д. c) для каждого квинтиля.
Я придумал этот очень любительский метод. Может ли кто-нибудь сказать мне, почему он не работает?
for (i in 1:5) {
for (j in nrow(hispn)) {
if ( (hispn[j,"FAMINC17"]>qq_hispn[i])&&(hispn[j,"FAMINC17"]<=qq_hispn[i+1])&&(hispn[j,"Stimulants"]==1) ) {
hispn[j,"Stim_Income"]<-i
} else if ( (hispn[j,"FAMINC17"]>qq_hispn[i])&&(hispn[j,"FAMINC17"]<=qq_hispn[i+1])&&(hispn[j,"Stimulants"]==0) ) {
hispn[j,"Stim_Income"]<-(i+5)
}
}
}
Я пытался реализовать код, который Мишель указала в комментариях, но он вернул ошибку.
hispn %>%
mutate(Stim_Income = case_when (
FAMINC17>qq_hispn[1] & FAMINC17<=qq_hispn[2] & Stimulants==1 ~ 1
FAMINC17>qq_hispn[1] & FAMINC17<=qq_hispn[2] & Stimulants==0 ~ 6
FAMINC17>qq_hispn[2] & FAMINC17<=qq_hispn[3] & Stimulants==1 ~ 2
FAMINC17>qq_hispn[2] & FAMINC17<=qq_hispn[3] & Stimulants==0 ~ 7
FAMINC17>qq_hispn[3] & FAMINC17<=qq_hispn[4] & Stimulants==1 ~ 3
FAMINC17>qq_hispn[3] & FAMINC17<=qq_hispn[4] & Stimulants==0 ~ 8
FAMINC17>qq_hispn[4] & FAMINC17<=qq_hispn[5] & Stimulants==1 ~ 4
FAMINC17>qq_hispn[4] & FAMINC17<=qq_hispn[5] & Stimulants==0 ~ 9
FAMINC17>qq_hispn[5] & FAMINC17<=qq_hispn[6] & Stimulants==1 ~ 5
FAMINC17>qq_hispn[5] & FAMINC17<=qq_hispn[6] & Stimulants==0 ~ 10
)
)
Другой пользователь спросил для воспроизводимых данных и примера вывода.
m1<- matrix(0,ncol=2,nrow=5)
m1[1,1]=1000
m1[2,1]=1000
m1[3,1]=1000
m1[4,1]=1000
m1[5,1]=10000
m1[3,2]=1
[,1] [,2]
[1,] 1000 0
[2,] 1000 0
[3,] 1000 1
[4,] 1000 0
[5,] 10000 0
И затем, вот новый столбец с интересующей информацией, если бы for l oop работал бы. Но вместо этого я получил столбец NA.
[,1] [,2] [,3]
[1,] 1000 0 6
[2,] 1000 0 6
[3,] 1000 1 5
[4,] 1000 0 6
[5,] 0 0 7