对于循环识别 R 中不存在的 NA
For loop identifying inexistent NAs in R
我有一个名为 z 的大数据框,它有 107310 行和 8 列。它在通过此函数时没有 NA:z<-z[complete.cases(z),]
以消除所有包含 NA 的行。
如果 specific 列的值高于另一个 specific 列的值,我创建了以下 for 循环以删除所有行。
首先,我尝试了以下代码:
for(row in 1:nrow(z)){
i <- z[row, 1]
j <- z[row, 2]
ci<- z[row, 6]
cj<- z[row, 7]
year <- z[row, 8]
if(cj>ci){
z<-z[-row,]}
}
循环将 运行 通过但停在某行指示以下错误:
“错误:缺少 TRUE/FALSE 需要的值”
即使没有 NA,我也修改了循环以避免错误,使 if 语句中的值始终为数字:
for(row in 1:nrow(z)){
i <- z[row, 1]
j <- z[row, 2]
ci<- z[row, 6]
cj<- z[row, 7]
year <- z[row, 8]
temp<-ci-cj
temp<-ifelse(!is.na(temp),temp,0)
if(temp<=0){
z<-z[-row,]}
}
然而,循环仍然在消除所有 cj>ci 的行之前停止。它为 i 和 j 生成的最后一个值是 NA,为 ci 和 cj 生成的最后一个值是 NA_real,即使这些值在数据集中不是 NA。
有人知道发生了什么事吗?
谢谢
您可以使用两步过程来避免 for 循环。首先使用 ifelse
标记出不需要的情况,然后使用 subset
删除它们,如下所示:
z$flag <- ifelse(z$col6 < z$col7, 1, 0)
new_z <- subset(z, flag == 0)
这是假设第 6 和第 7 列被命名为 'col6' 和 'col7'。
我有一个名为 z 的大数据框,它有 107310 行和 8 列。它在通过此函数时没有 NA:z<-z[complete.cases(z),]
以消除所有包含 NA 的行。
如果 specific 列的值高于另一个 specific 列的值,我创建了以下 for 循环以删除所有行。
首先,我尝试了以下代码:
for(row in 1:nrow(z)){
i <- z[row, 1]
j <- z[row, 2]
ci<- z[row, 6]
cj<- z[row, 7]
year <- z[row, 8]
if(cj>ci){
z<-z[-row,]}
}
循环将 运行 通过但停在某行指示以下错误:
“错误:缺少 TRUE/FALSE 需要的值”
即使没有 NA,我也修改了循环以避免错误,使 if 语句中的值始终为数字:
for(row in 1:nrow(z)){
i <- z[row, 1]
j <- z[row, 2]
ci<- z[row, 6]
cj<- z[row, 7]
year <- z[row, 8]
temp<-ci-cj
temp<-ifelse(!is.na(temp),temp,0)
if(temp<=0){
z<-z[-row,]}
}
然而,循环仍然在消除所有 cj>ci 的行之前停止。它为 i 和 j 生成的最后一个值是 NA,为 ci 和 cj 生成的最后一个值是 NA_real,即使这些值在数据集中不是 NA。
有人知道发生了什么事吗? 谢谢
您可以使用两步过程来避免 for 循环。首先使用 ifelse
标记出不需要的情况,然后使用 subset
删除它们,如下所示:
z$flag <- ifelse(z$col6 < z$col7, 1, 0)
new_z <- subset(z, flag == 0)
这是假设第 6 和第 7 列被命名为 'col6' 和 'col7'。