我有一个数据框,其中包含问题的答案: "你在家里说什么语言? 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话题引起了很多争议。在发布之前我已经搜索了很多解决方案,但找不到它。
希望有人能帮我摆脱困境
答案 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
1
和numeric
的事实。
答案 1 :(得分:0)
可能有帮助
(!rowSums(student1==1 & !is.na(student1))) +1
#1 2 3 4 5 6
#1 1 1 2 1 1