使用带有NA的ifelse创建新变量

时间:2014-07-31 13:25:28

标签: r

我有一个数据框,其中包含问题的答案: "你在家里说什么语言? 1 =英语 2 =西班牙语 等等...

     first.language second.language third.language fourth.language
1              1              NA             NA              NA
2              1               2             NA              NA
3              1               2             NA              NA
4              2              NA             NA              NA
5              1               2             NA              NA
6              1               5             NA              NA

我想要做的是创建变量:" english.home" " english.home"将会: 1 =如果在家里说英语,不要介意它是第一,第二......语言 2(否)=如果不在家说英语。

我尝试使用:

student1$english.home = ifelse(student1$first.language==1 |
student1$second.language==1 | student1$third.language==1 |
student1$fourth.language==1,1,2) 

但我得到了:

>   english.home
1            1
2            1
3            1
4           NA
5            1
6            1

有没有办法在第4行没有NA的情况下完成此操作。因为它是NA并不重要,重要的是它不是英语!

我知道ifelse-Na话题引起了很多争议。在发布之前我已经搜索了很多解决方案,但找不到它。

希望有人能帮我摆脱困境

2 个答案:

答案 0 :(得分:1)

这样的事情应该做你想做的事。

# Read your data
tab <- read.table(text ="  
first.language second.language third.language fourth.language
1              1              NA             NA              NA
2              1               2             NA              NA
3              1               2             NA              NA
4              2              NA             NA              NA
5              1               2             NA              NA
6              1               5             NA              NA")

tab$english.home <- 
  apply(tab, 1, function (x) 2 - any(x == 1, na.rm = TRUE))
print(tab)
#  first.language second.language third.language fourth.language english.home
#1              1              NA             NA              NA            1
#2              1               2             NA              NA            1
#3              1               2             NA              NA            1
#4              2              NA             NA              NA            2
#5              1               2             NA              NA            1
#6              1               5             NA              NA            1

我们使用logical向量在numeric添加(或减去)时被提升为0 1numeric的事实。

答案 1 :(得分:0)

可能有帮助

(!rowSums(student1==1 & !is.na(student1))) +1
#1 2 3 4 5 6 
#1 1 1 2 1 1