-1

假设我有一个数据集:

    X   Y
1   0 500
2 125 375
3 250 250
4 375 125
5 500 500
6 750 250
  ....
  ....

可以通过以下方式生成:

df <- data.frame(X = c(0,125,250,375,500,750), Y=c(500,375,250,125,500,250))

我需要根据 和 的数值关系分配一个类别XY。例如:

if X=0, then assign label A
if Y>X and Y/X=3 then assign label B
if X=Y then assign label C
if X>Y and X/Y=3 then assign label D

所以本质上,我是根据 X 和 Y 的比率分配标签:0、0.25、0.75、1。所以我希望得到的最终结果是:

    X   Y   Category
1   0 500   A
2 125 375   B
3 250 250   C
4 375 125   D
5 500 500   C
6 750 250   D
  ....
  ....

我应该如何做到这一点?谢谢

4

3 回答 3

5

使用data.table

library(data.table)
df <- data.table(X = c(0,125,250,375,500,750), Y=c(500,375,250,125,500,250))

# if X=0, then assign label A
df[X ==0, Label := "A"]
# if Y>X and Y/X=3 then assign label B
df[Y > X & Y/X == 3, Label := "B"]
# if X=Y then assign label C
df[Y == X, Label := "C"]
# if X>Y and X/Y=3 then assign label D
df[X > Y & X/Y == 3, Label := "D"]

     # X   Y Label
# 1:   0 500     A
# 2: 125 375     B
# 3: 250 250     C
# 4: 375 125     D
# 5: 500 500     C
# 6: 750 250     D

并使用带有 data.table 的@Jilber 方法 -

df[, Label := ifelse( X > Y & X/Y == 3, "D", 
     ifelse(Y == X,"C",
         ifelse(Y > X & Y/X == 3, "B", "A"
         )
      )
   )
]
于 2013-10-01T14:03:25.303 回答
2

data.frame或使用标准

df <- within(df, {
  label <- NA
  label[X == 0]           <- "A"
  label[Y > X & Y/X == 3] <- "B"
  label[Y == X]           <- "C"
  label[X > Y & X/Y == 3] <- "D"
})

应该df使用所需的列进行更新

于 2013-10-01T14:33:00.717 回答
1

采用ifelse

> transform(df, Category=ifelse(X==0, "A",
                                ifelse(Y>X & Y/X==3, "B", 
                                       ifelse(X==Y, "C", "D"))))
    X   Y Category
1   0 500        A
2 125 375        B
3 250 250        C
4 375 125        D
5 500 500        C
6 750 250        D
于 2013-10-01T13:59:21.637 回答