假设我有一个数据集:
X Y
1 0 500
2 125 375
3 250 250
4 375 125
5 500 500
6 750 250
....
....
Run Code Online (Sandbox Code Playgroud)
可以通过以下方式生成:
df <- data.frame(X = c(0,125,250,375,500,750), Y=c(500,375,250,125,500,250))
Run Code Online (Sandbox Code Playgroud)
我需要分配基础上的数值关系的类别值X和Y。例如:
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
Run Code Online (Sandbox Code Playgroud)
因此,基本上,我是根据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
....
....
Run Code Online (Sandbox Code Playgroud)
我应该如何做到这一点?谢谢
使用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
Run Code Online (Sandbox Code Playgroud)
并在data.table中使用@Jilber方法-
df[, Label := ifelse( X > Y & X/Y == 3, "D",
ifelse(Y == X,"C",
ifelse(Y > X & Y/X == 3, "B", "A"
)
)
)
]
Run Code Online (Sandbox Code Playgroud)