時間の列があり、それを新しい列にグループ化する必要があります。
structure(list(Q11aWalkHoursEdit.SS = c(0, 1, 2, 3, 4, 5, 6,
6, 7, 2.5, 6, 1.9, 0.5)),
.Names = "Q11aWalkHoursEdit.SS",
class = "data.frame",
row.names = c(NA, -13L))
最初は、次のように if を使用すると考えていました。
grouphours <- function(data){
data$Q11aWalkHours.SS <- NA
if(data["Q11aWalkHoursEdit.SS"] >= 5){
data["Q11aWalkHours.SS"] = "5 hours +"
} else if(data["Q11aWalkHoursEdit.SS"] > 4){
data["Q11aWalkHours.SS"] = "4-5 hours"
} else if(data["Q11aWalkHoursEdit.SS"] > 3){
data["Q11aWalkHours.SS"] = "3-4 hours"
} else if(data["Q11aWalkHoursEdit.SS"] > 2){
data["Q11aWalkHours.SS"] = "2-3 hours"
} else if(data["Q11aWalkHoursEdit.SS"] > 1){
data["Q11aWalkHours.SS"] = "1-2 hours"
} else if(data["Q11aWalkHoursEdit.SS"] > 0){
data["Q11aWalkHours.SS"] = "0-1 hours"
} else if(data["Q11aWalkHoursEdit.SS"] == 0){
data["Q11aWalkHours.SS"] = "0 hours"
} else {
data["Q11aWalkHours.SS"] = NA
}
return(data)
}
test <- grouphours(stuff)
しかし、 if はベクトルでは機能しないため、これは機能しません。次のエラーが発生します。
1: In if (data["Q11aWalkHoursEdit.SS"] >= 5) { ... :
the condition has length > 1 and only the first element will be used
次に for ループを書き始めましたが、これも機能しません。理由がよくわかりません。
grouphours <- function(data){
data$Q11aWalkHours.SS <- NA
l<-length(stuff$Q11aWalkHoursEdit.SS)
for(i in 1:l){
if(data["Q11aWalkHoursEdit.SS"] >= 5){
data["Q11aWalkHours.SS"] = "5 hours +"
} else if(data["Q11aWalkHoursEdit.SS"] > 4){
data["Q11aWalkHours.SS"] = "4-5 hours"
} else if(data["Q11aWalkHoursEdit.SS"] > 3){
data["Q11aWalkHours.SS"] = "3-4 hours"
} else if(data["Q11aWalkHoursEdit.SS"] > 2){
data["Q11aWalkHours.SS"] = "2-3 hours"
} else if(data["Q11aWalkHoursEdit.SS"] > 1){
data["Q11aWalkHours.SS"] = "1-2 hours"
} else if(data["Q11aWalkHoursEdit.SS"] > 0){
data["Q11aWalkHours.SS"] = "0-1 hours"
} else if(data["Q11aWalkHoursEdit.SS"] == 0){
data["Q11aWalkHours.SS"] = "0 hours"
} else {
data["Q11aWalkHours.SS"] = NA
}
}
return(data)
}
test <- grouphours(stuff)
とにかく、ループを使用する必要はないように感じます-この質問のコメントに基づいて: 警告「条件の長さは> 1で、最初の要素のみが使用されます」 しかし、それらを適用する方法を理解するのに問題があります私の状況への反応。
編集:
みんな助けてくれてありがとう。次のコードを使用して、完全に機能させました。「より良い」解決策になると思いますcut
が、まだ理解していないので、今のところ ifelse を使用します。
stuff$test <- ifelse(stuff$Q11aWalkHoursEdit.SS>=5, "Five +",
ifelse (stuff$Q11aWalkHoursEdit.SS>=4, "Four to five",
ifelse (stuff$Q11aWalkHoursEdit.SS>=3, "Three to four",
ifelse (stuff$Q11aWalkHoursEdit.SS>=2, "Two to three",
ifelse (stuff$Q11aWalkHoursEdit.SS>=1, "One to two",
ifelse(stuff$Q11aWalkHoursEdit.SS>0, "0 to one", "Zero")
)
)
)
)
)