aa$Survival <- ifelse(aa$Survival=="Alive","0","1") 错误于`$<-.data.frame`(`*tmp*`, Survival, value = logical(0)): 替换数据里有0行,但数据有7556
时间: 2024-09-28 19:10:09 浏览: 40
python实现基于scikit-survival工具包进行生存预测分析项目源码.zip
5星 · 资源好评率100%
这个R语言的错误提示表明你在尝试将向量值("0" 和 "1")替换到"data.frame"(`aa`)的一个列(`Survival`)中,但是由于数据框的实际行数(7556行)大于你提供的新值(0行),所以产生了错误。
`ifelse()`函数通常用于创建一个新的向量,其长度会根据输入数据框的行数调整。在这种情况下,你需要确保你的`ifelse()`条件返回的新向量长度可以覆盖整个数据框。可能是你想把分类变量"Survival"转换成二进制形式(比如生存状态为活(1)或死(0)),但你需要提供所有观测结果的新标签,而非仅对部分进行处理。
解决这个问题的一种方法是遍历整个数据框并应用`ifelse()`,或者先计算出每个观察需要的"0" 或 "1",然后合并这些新的值。这里是一个可能的修复方案:
```r
# 如果Survival列包含缺失值或非"Alive"和"Dead"这样的值
# 先清理数据
cleaned_data <- na.omit(aa)
cleaned_data$Survival_clean <- as.numeric(cleaned_data$Survival == "Alive")
# 或者如果Survival只有两个可能的值
survival_codes <- c("Alive" = 0, "Dead" = 1)
aa$Survival <- survival_codes[aa$Survival]
# 确保新赋值后的数据长度与原数据一致
aa$Survival <- rep(aa$Survival, times = nrow(aa))
# 检查并确认新数据是否适合
dim(aa$Survival)
```
阅读全文