首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“对象'i‘找不到”for循环

“对象'i‘找不到”for循环
EN

Stack Overflow用户
提问于 2020-02-20 03:15:06
回答 3查看 472关注 0票数 0

我正在尝试创建一个简单的for循环,它将通过为每个观察值分配一个时间类来向现有数据框添加一个新列。我得到了'object 'i‘not found’,但不确定哪里出了错。我对R不是很有经验,所以谢谢你的帮助!

代码语言:javascript
运行
复制
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
    }
}
EN

回答 3

Stack Overflow用户

发布于 2020-02-20 03:58:07

我认为您可以简单地使用嵌套的ifelse语句:

代码语言:javascript
运行
复制
my.data$RTimeHour <- ifelse(my.data$RTime <= 3600, 1,
                            ifelse(my.data$RTime > 3600 & my.data$RTime <= 7200, 2, 3))
票数 0
EN

Stack Overflow用户

发布于 2020-02-20 05:18:10

错误可能来自您拥有的ifelse():

代码语言:javascript
运行
复制
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
    }
}

试着这样做:

代码语言:javascript
运行
复制
    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.
票数 0
EN

Stack Overflow用户

发布于 2020-02-20 05:22:48

使用tidyverse矢量化后,我们可以这样做:

代码语言:javascript
运行
复制
library(tidyverse)

my.data %>% mutate(RTimeHour = case_when(
    RTime <= 3600 ~ 1,
    RTime < 7200 ~ 2,
    TRUE ~ 3)
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60307660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档