如果存在一个完全健康的值,则if语句将返回“缺少值”错误。
我想编写一个简单的脚本来删除数据集中的行(如果其中一个条目包含某个标记)。我在新列(containsMR)中分配了一个指标变量,然后使用for循环遍历各行。如果指示器为TRUE,则应删除该行。
到目前为止,指标分配正确,效果很好。有趣的部分:在循环的if语句中似乎难以读取值,因为它返回“ if(data(containsMR [i]){ 缺少需要TRUE / FALSE的值”。
给出正确(且完整)的指标变量分配,这让我感到惊讶。更奇怪的是:删除了一些但不是全部带有正指示符的行(使用打印输出和table(data $ containsMR)进行了检查)。
现在真的很奇怪:如果我再运行一次相同的循环,它将删除其余的列(应有的话),但返回相同的错误。因此,从理论上讲,我可以运行两次循环,忽略错误并获得想要的结果。那真的不是我在做什么的重点。
修正的修正: -从for改为while循环 -将指标(和if语句)更改为整数(0,1) -在RStudio和R控制台中运行脚本 -更改了变量名称,包括了/排除了定义(例如,添加代理变量row_number而不是一行调用它。
# Script to delete all rows containing "MR" in column "EXAM_CODE"
# import file
data <- read.csv("C:\\ScriptingTest\\ablations 0114.csv")
# add indicator column
for (i in 1:nrow(data)){
data$containsMR[i] <- ifelse(grepl("MR", toString(data$EXAM_CODE[i])), TRUE, FALSE)
}
# remove rows with positive indicator
row_number <- nrow(data)
for (i in 1:row_number){
if (data$containsMR[i]){
data <- data[-c(i),]
}
}
# export csv
write.csv(data, "C:\\ScriptingTest\\export.csv")
答案 0 :(得分:1)
为说明问题是在要循环的for循环中修改对象的大小,请参见以下示例:
PRE_TARGETDEPS += path/to/mylib.a
答案 1 :(得分:0)
您也许可以简化为
newdata <- data[!grepl("MR", data$EXAM_CODE),]