如何根据多个条件创建列?

时间:2016-01-06 20:23:25

标签: r

我有一个数据框,我想根据多个条件创建一个列:

v1  v2  v3  v4  v5
4   1   2   4   5
5.5 2   4   5   6
21  9  20  30   50 
6   4   5   7   9
10  3   6   5   9

基本上,创建具有以下可能值的v6:Cat,dog,ant,hog

  1. 如果v1介于v2和v3之间,那么cat
  2. 如果v1介于v3和v4之间,那么狗
  3. 如果v1介于v4和v5之间,那么蚂蚁
  4. 如果v1大于v5,则为hog。
  5. 我知道如何针对单一条件执行此操作,但不是多条件。

2 个答案:

答案 0 :(得分:5)

嵌套的ifelse语句:

df$v6 <- with(df, ifelse(
  v1 >= v2 & v1 <= v3, 'cat', ifelse(
  v1 >= v3 & v1 <= v4, 'dog', ifelse(
  v1 >= v4 & v1 <= v5, 'ant', ifelse(
  v1 >= v5, 'hog', 'whoops')))))


> df
    v1 v2 v3 v4 v5  v6
1  4.0  1  2  4  5 dog
2  5.5  2  4  5  6 ant
3 21.0  9 20 30 50 dog
4  6.0  4  5  7  9 dog
5 10.0  3  6  5  9 hog

答案 1 :(得分:0)

假设d是您的数据框,您可以使用ifelse函数尝试类似下面的内容。

d[,6] <- rep(" ", 5)

d[,6] <-  ifelse(d[,1] >= d[,2] & d[,1] <= d[,3] & d[,6] == " ", "cat", d[,6])
d[,6] <-  ifelse(d[,1] >= d[,3] & d[,1] <= d[,4] & d[,6] == " ", "dog", d[,6])
d[,6] <-  ifelse(d[,1] >= d[,4] & d[,1] <= d[,5] & d[,6] == " ", "ant", d[,6])
d[,6] <-  ifelse(d[,1] >= d[,5] & d[,6] == " ", "hog", d[,6])
相关问题