我正在尝试创建一个简单的for循环,它将通过为每个观察值分配一个时间类来向现有数据框添加一个新列。我得到了'object 'i‘not found’,但不确定哪里出了错。我对R不是很有经验,所以谢谢你的帮助!
for (i in 1:nrow(my.data)) {
if(my.data$RTime[i] <= 3600){
my.data$RTimeHour[i] <- 1
}ifelse (my.data$RTime[i] > 3601 & my.data$RTime[i] < 7200){
my.data$RTimeHour[i] <- 2
}esle {
my.data$RTimeHour[i] <- 3
}
}
发布于 2020-02-20 03:58:07
我认为您可以简单地使用嵌套的ifelse
语句:
my.data$RTimeHour <- ifelse(my.data$RTime <= 3600, 1,
ifelse(my.data$RTime > 3600 & my.data$RTime <= 7200, 2, 3))
发布于 2020-02-20 05:18:10
错误可能来自您拥有的ifelse():
for (i in 1:nrow(my.data)) {
if(my.data$RTime[i] <= 3600){
my.data$RTimeHour[i] <- 1
}ifelse (my.data$RTime[i] > 3601 & my.data$RTime[i] < 7200){
my.data$RTimeHour[i] <- 2
}esle {
my.data$RTimeHour[i] <- 3
}
}
试着这样做:
if(my.data$RTime[i] <= 3600){
my.data$RTimeHour[i] <- 1
}else if(my.data$RTime[i] > 3601 & my.data$RTime[i] < 7200){
my.data$RTimeHour[i] <- 2
}else {
my.data$RTimeHour[i] <- 3
}
}
ifelse vectorizes how the problem, so ifelse(x[i]) will try to refer to something outside of the loop.
发布于 2020-02-20 05:22:48
使用tidyverse
矢量化后,我们可以这样做:
library(tidyverse)
my.data %>% mutate(RTimeHour = case_when(
RTime <= 3600 ~ 1,
RTime < 7200 ~ 2,
TRUE ~ 3)
)
https://stackoverflow.com/questions/60307660
复制相似问题