0

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

  • 表 1-6:ALL 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
4

2 回答 2

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
...
于 2013-02-25T12:30:57.667 回答
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
于 2015-02-20T09:01:11.320 回答