R:对非数字值使用ifelse函数

时间:2018-07-02 03:25:09

标签: r if-statement

使用ifelse选项时遇到一些麻烦。 我想使用此函数来进行多元线性回归。 我有一个很大的数据集,大多数数据是“ NA”,另一些是 话。 这个想法是拥有NA = 0,如果没有NA,那么它应该等于1。 这样我就完成了:

dsp = ifelse (sp == "NA", 0, 1)

但是当我打印dsp时:我可以看到将非NA的值更改为1,但是 NA的值不会更改为0,并且仍然相同。

我尝试了is.na()函数,然后对于FALSE值得到了NA,对于非NA值则得到了TRUE。我尝试过ifelse( dsp == "False", 0, 1),但结果却与dsp = ifelse (sp == "NA", 0, 1)

我应该怎么做?

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,那么您想将向量中的所有NA替换为0,并且如果1有一个值。

如@Maurits Evers所说,您可以这样做:

require(tidyverse)

df %>% 
  mutate(x = ifelse(is.na(x), 0, 1))

此外,您可以使用case_when获得相同的结果:

df %>% 
  mutate(x = case_when(
    is.na(x) ~ 0,
    TRUE ~ 1))

此外,您也可以使用基数R:

df[which(abs(df$x) >= 0), ] <- 1
df$x[is.na(df$x), ] <- 0

如@Tino所建议,另一个基本的R选项可以使用transform()ifelse()

transform(df, x = ifelse(is.na(x), 0, 1))

样本数据集:

df <- data.frame(x = c(NA, 1, 2, NA, 3))

答案 1 :(得分:-2)

只需在原始代码下方添加另一行代码,它便可以正常工作:

dsp = ifelse (sp == "NA", 0, 1)
dsp[is.na(dsp)]<-0