2015-12-07 216 views
0

我有一个数据集,其中值为1到5的变量。 我想创建一个新的列,其中值1和3变成A,2和4变成B,变成5 ç嵌套ifelse语句 - 1输出的多个值

data$new <- ifelse(data$value == c("1", "3"), "A", 
           ifelse(data$value == c("2", "4"), "B", "C")) 

这适用于1,2和5。但由于某些原因,它不接受我把多个号码A和B.我怎样才能让R,共创如果是1或3?

回答

2

我想在这里你应该使用运营商%in%。 它的工作原理是这样的:

> '5' %in% c('1', '3', '5') 
[1] TRUE 
> '2' %in% c('1', '3', '5') 
[1] FALSE 

正好相反,由于平等==是这样的:

> '2' == c('2', '4') 
[1] TRUE FALSE 

- 它实际上输出两个布尔值的数组。作为测试的结果,可能ifelse将第一个数组作为该数组。

因此,在您的示例中,它被用作data$value %in% c("1", "3") - data$value数组的每个值都被测试为在给定的数组中。

PS

还要注意 - 在您的例子中,你使用字符串'1''2'等 - 检查,如果你真的想串在那里,而不是numeric秒。