对 R 中的 if 语句感到困惑:想做条件 NA
Confused about if statement in R: Want to make conditional NA
我对 R 中的条件 if 语句感到困惑。
我想要的:
假设有两个变量;数据$出口和数据$销售,
仅当一行的 Data$Export 和 Data$Sales 的值为“0”时,我才希望从数据集中删除该行。或者,正如我所想的那样,将行中的任何变量设置为 NA,因此将被删除:"Data <- na.omit(Data) " anyway.
于是想到了如下构造:
for (i in 1:nrow(Data)) { if ( (Data$Sales[i] == 0) &(Data$Export[i] == 0 ) ) {Data$Sales [i] <- NA }}
Data <- na.omit(Data)
但是,这不起作用,错误代码产生:
TRUE/FALSE 需要
的缺失值
提前感谢您对我可能获得的任何帮助。
我认为您不需要使用条件 if 语句来这样做。使用 diamonds
data.frame,您可以删除变量 y
和 z
中都为 0 的行,如下所示。感谢@Moody、@Uwe 和 OP 评论,它应该是 |代替 &。
library(dplyr)
diamonds1 <- diamonds %>%
dplyr::filter(y!=0 | z!=0)
同样可以应用于您的数据框
data1 <- data %>%
dplyr::filter(Sales!=0 | Export!=0)
Data2 <- Data[Data$Export !=0 | Data$Sales != 0,]
或设置 NA
Data[Data$Export !=0 | Data$Sales != 0,] <- NA
我对 R 中的条件 if 语句感到困惑。
我想要的:
假设有两个变量;数据$出口和数据$销售,
仅当一行的 Data$Export 和 Data$Sales 的值为“0”时,我才希望从数据集中删除该行。或者,正如我所想的那样,将行中的任何变量设置为 NA,因此将被删除:"Data <- na.omit(Data) " anyway.
于是想到了如下构造:
for (i in 1:nrow(Data)) { if ( (Data$Sales[i] == 0) &(Data$Export[i] == 0 ) ) {Data$Sales [i] <- NA }}
Data <- na.omit(Data)
但是,这不起作用,错误代码产生: TRUE/FALSE 需要
的缺失值提前感谢您对我可能获得的任何帮助。
我认为您不需要使用条件 if 语句来这样做。使用 diamonds
data.frame,您可以删除变量 y
和 z
中都为 0 的行,如下所示。感谢@Moody、@Uwe 和 OP 评论,它应该是 |代替 &。
library(dplyr)
diamonds1 <- diamonds %>%
dplyr::filter(y!=0 | z!=0)
同样可以应用于您的数据框
data1 <- data %>%
dplyr::filter(Sales!=0 | Export!=0)
Data2 <- Data[Data$Export !=0 | Data$Sales != 0,]
或设置 NA
Data[Data$Export !=0 | Data$Sales != 0,] <- NA