R语言生成DataFrame的status列时遇'argument is of length zero'错误求助
嘿,这个错误的核心原因很明确——你没初始化循环需要的i变量和status向量!咱们一步步来解决:
首先,先修复你写的while循环:
你得先给i设初始值(比如i <- 1),还要提前创建一个和数据行数匹配的status向量,不然循环一开始就找不到i的取值,或者给status赋值时会出现索引问题。修改后的代码如下:
# 初始化变量 i <- 1 status <- numeric(nrow(df)) # 创建长度等于df行数的空数值向量 while(i <= nrow(df)) { if(df$End_week[i] == 1426) { status[i] <- 1 } else { status[i] <- 0 } i <- i + 1 } # 将生成的status列加入原数据框 df$Status <- status
不过说实话,在R里用循环处理这种逐行判断的问题有点“杀鸡用牛刀”,因为R天生支持向量化操作,一行代码就能搞定,效率还更高:
方法1:用ifelse函数(向量版的条件判断)
df$Status <- ifelse(df$End_week == 1426, 1, 0)
方法2:直接把逻辑结果转成整数
R里的逻辑值TRUE等价于1,FALSE等价于0,所以可以直接把判断结果转成整数:
df$Status <- as.integer(df$End_week == 1426)
这两种方法都能直接生成你想要的Status列,而且代码更简洁,运行速度也比循环快(尤其是数据量大的时候)。
最后验证一下,处理后的dataframe就是你想要的样子:
ID End_week Status 2500076 1223 0 6801102 1325 0 6801282 1308 0 6803252 1426 1 9882106 1426 1 9894112 1217 0
内容的提问来源于stack exchange,提问作者Rnovice
相关产品推荐
相关产品推荐

