Мой набор данных состоит из баллов и общего числа респондентов, ответивших на вопросы, заданные в ходе опроса, в течение ряда финансовых лет (2013 ФГ, 14 ФГ и 15 ФГ) и в разных регионах.
Моя цель состоит в том, чтобы пройтись по FY
и укажите, когда задавался каждый вопрос, для каждого региона.И сохраните эту информацию в новом столбце.
Вот так выглядит воспроизводимый образец -
testdf=data.frame(FY=c("FY13","FY14","FY15","FY14","FY15","FY13","FY14","FY15","FY13","FY15","FY13","FY14","FY15","FY13","FY14","FY15"),
Region=c(rep("AFRICA",5),rep("ASIA",5),rep("AMERICA",6)),
QST=c(rep("Q2",3),rep("Q5",2),rep("Q2",3),rep("Q5",2),rep("Q2",3),rep("Q5",3)),
Very.Satisfied=runif(16,min = 0, max=1),
Total.Very.Satisfied=floor(runif(16,min=10,max=120)),
Satisfied=runif(16,min = 0, max=1),
Total.Satisfied=floor(runif(16,min=10,max=120)),
Dissatisfied=runif(16,min = 0, max=1),
Total.Dissatisfied=floor(runif(16,min=10,max=120)),
Very.Dissatisfied=runif(16,min = 0, max=1),
Total.Very.Dissatisfied=floor(runif(16,min=10,max=120)))
Я начинаю с создания столбца идентификатора, объединяя Region
& QST
library(tidyr)
testdf = testdf %>%
unite(ID,c('Region','QST'),sep = "",remove = F)
Моя цель
1) Для каждого уникального ID
укажите, был ли задан данный вопрос -
a) Только наодин год (либо в 2013 финансовом году, либо в 2013 финансовом году)
b) в течение последних двух лет (только в 2015 финансовом году и в 2014 финансовом году)
в) в течение последних трех лет (в 2015 финансовом году и в 2014 финансовом году)
d) Только для FY13 и FY15
Моя попытка
Для этой проблемы я попытался создать for loop
и для каждого уникального ID
, я сначала сохраняю уникальные случаи каждого финансового года, на который был задан вопрос, в векторе v
.Затем, используя условный оператор IF, я назначаю комментарий для вновь созданного столбца с именем Tally
на основе этих случаев.
for (i in unique(testdf$ID))
{
v=unique(testdf$FY)
if(('FY15' %in% v) & ('FY14' %in% v)) {
testdf$Tally=='Asked Over The Past Two Years'
}
else if(('FY15' %in% v) & ('FY14' %in% v) & ('FY13' %in% v)) {
testdf$Tally=='Asked Over The Past Three Years'
}
else if(('FY13' %in% v) & ('FY15' %in% v)) {
testdf$Tally=='Question Asked in FY13 & FY15 Only'
}
else { testdf$Tally=='Question Asked Once Only'
}
}
Цикл, кажется, выполняется без выдачи сообщения об ошибке, но не кажется,для создания нового столбца Tally
.
Любая помощь с этим будет принята с благодарностью.