当使用R满足某些条件时,使用两列创建具有多个类别的新列

时间:2013-02-25 10:48:57

标签: r conditional-statements multiple-columns

我有一个数据集“X”(值从 0到80 )和“Y”(值从 0到80 )。我想创建一个新列“表”。我有36张桌子:6人一组......他们应按照以下方式分组:

  • 表1-6:所有Y 11-20 ...表7-12:Y 21-30 ,表13-18:Y 31 -40 ,表19-24:Y 41-50 ,表25-30:Y 51-60 ,表31-36:Y 61-70
  • 表1:X 21-30 和表7,13,19,25,31
  • 表2:X 31-40 和表8,14,20,26,32
  • 表3:X 41-50 和表9,15,21,27,33
  • 表4:X 51-60 和表10,16,22,28,34
  • 表5:X 61-70 和表11,17,23,29,35
  • 表6:X 71-80 和表12,18,24,30,36

结束结果:

X   Y   Table
45  13    3
66  59    29
21  70    31
17  66    NA (there is no table for X lower than 21)

我是否应该使用If Else功能将“X”和“Y”中的数据分组到我的新“表格”中,范围从1到36或其他?任何帮助将不胜感激!谢谢!

头(数据)

    value avg.temp  X  Y
1      0     6.69   45 13
2      0     6.01   48 14
3      0     7.35   39 15
4      0     5.86   45 15
5      0     6.43   42 16
6      0     5.68   48 16

2 个答案:

答案 0 :(得分:0)

我认为你可以使用这样的东西。如果您的数据框名为df

df$Table <- NA
df$Table[df$X>=21 & df$X<=30 & df$Y>=11 & df$Y<=20] <- 1
df$Table[df$X>=31 & df$X<=40 & df$Y>=11 & df$Y<=20] <- 2
...

答案 1 :(得分:0)

使用数学和索引:

# demo data
x <- data.frame(X = c(45,66,21,17,0,1,21,80,45),Y = c(13,59,70,66,80,11,0,1,27))

# if each GROUP of Y tables was numbered 1-6, aka indexing
x$ytableindex <- ((x$Y-1) - (x$Y-1) %% 10) / 10

# NA if too low
x$ytableindex[x$ytableindex < 1] <- NA

# find lowest table based on Y index
x$ytable <- (0:5*6+1)[x$ytableindex]

# find difference from lowest Y table to arrive at correct table using X
x$xdiff <- floor((x$X - 1) / 10 - 2)

# NA if too low
x$xdiff[x$xdiff < 0] <- NA

# use difference to calculate the correct table, NA's stay NA
x$Table <- x$ytable + x$xdiff