R语言:解决基于行索引生成Prediction列全为NA的问题
解决DataFrame生成Prediction列的问题
哦,我知道问题出在哪啦!你之前的代码犯了一个小错误——你用了nrow(newdata)来判断条件,但这个值是整个数据框的总行数(你的数据是40行),所以nrow(newdata) <=17永远是FALSE,难怪生成的Prediction列全是NA呢。我们需要判断的是每一行的行索引,而不是整个数据框的总行数。
下面给你几种正确的实现方法:
方法1:基础R的ifelse+行索引
直接针对每一行的位置进行判断,用seq_len(nrow(newdata))生成从1到总行数的序列,代表每行的索引:
newdata$Prediction <- ifelse(seq_len(nrow(newdata)) < 17, newdata$Value, NA)
如果你的行索引是默认的整数序列(从1开始),也可以直接用as.integer(rownames(newdata))来获取行索引:
newdata$Prediction <- ifelse(as.integer(rownames(newdata)) < 17, newdata$Value, NA)
方法2:tidyverse/dplyr风格(更简洁)
如果你习惯用tidyverse工具包,dplyr的row_number()函数可以直接获取每行的位置,代码更易读:
library(dplyr) newdata <- newdata %>% mutate(Prediction = ifelse(row_number() < 17, Value, NA))
方法3:直接赋值(直观高效)
先把Prediction列全部设为NA,再给前16行(索引小于17)赋值为Value列对应的值,这种方法逻辑清晰,效率也不错:
newdata$Prediction <- NA newdata$Prediction[1:16] <- newdata$Value[1:16]
验证示例
用你给出的前5行测试数据,运行上述任意一种方法,都会得到你期望的结果:
ID Year Value Prediction 1 2016 114235 114235 2 2016 114235 114235 3 2016 114235 114235 4 2016 114235 114235 5 2016 114235 114235
内容的提问来源于stack exchange,提问作者kimi
相关产品推荐
相关产品推荐

