基于data.R表中的两列创建分类变量
以下是数据表基于data.R表中的两列创建分类变量,r,data.table,categories,R,Data.table,Categories,以下是数据表 df <- data.table(id=c(1,2,3,4,5,6,7,8,9,10), var1=c(0,4,5,6,99,3,5,5,23,0), var2=c(22,4,6,25,6,70,75,23,24,21)) id var1 var2 1: 1 0 22 2: 2 4 4 3: 3 5 6 4: 4 6 25 5: 5 99 6 6
df <- data.table(id=c(1,2,3,4,5,6,7,8,9,10),
var1=c(0,4,5,6,99,3,5,5,23,0),
var2=c(22,4,6,25,6,70,75,23,24,21))
id var1 var2
1: 1 0 22
2: 2 4 4
3: 3 5 6
4: 4 6 25
5: 5 99 6
6: 6 3 70
7: 7 5 75
8: 8 5 23
9: 9 23 24
10: 10 0 21
原始的data.table
更大,有数千行。var2
中“yes”的目标值是多个彼此未连接的随机值,因此我可能必须使用c()
手动键入它们。
非常感谢您在data.table
中提供的帮助。到目前为止,我尝试在%中使用%,但不知道如何在两列中应用它。以前,我只在一个专栏中使用过它。
谢谢 您只需使用数据即可。否则,表的速度很快。我把它分开,以便更容易地阅读正在发生的事情。你必须使用一些布尔逻辑来得到你想要的
您需要获取第一个条件(不是0或99),并使用|(或)运算符在var1或var2条件中获取true if true,然后必须&var1条件,以便第一列中的任何0或99都将生成false,而不管var2如何。这是下面的条件2
你想要什么还不清楚。第二个条件似乎是您想要的,但由于您的结果与输入数据不匹配,我无法确定。你还说了和/或在布尔上下文中没有真正意义的(一个或另一个)
not_zero_nn您的结果与您的陈述不一致。在两个条件之间是否需要“and”或“or”?此外,结果数据帧与输入不同。很难辨别你想要的是真的,想要的是假的。你怎么写和/或?这些条件完全不同,不能互换。此外,输入中显示的数据与输出中显示的数据不同。你能验证/确认哪一个是正确的吗?
id var1 var2 cat
1: 1 0 22 yes
2: 2 4 4 yes
3: 3 5 6 yes
4: 4 6 25 yes
5: 5 99 6 no
6: 6 3 70 yes
7: 7 5 75 yes
8: 8 0 23 yes
9: 9 99 24 yes
10: 10 0 0 no
not_zero_nn <- !(df$var1 %in% c(0, 99))
condition <- not_zero_nn | (df$var2 %in% 20:29)
condition2 <- condition & not_zero_nn
df[, cat := fifelse(condition, 'yes', 'no')]
id var1 var2 cat
# 1: 1 0 22 yes
# 2: 2 4 4 yes
# 3: 3 5 6 yes
# 4: 4 6 25 yes
# 5: 5 99 6 no
# 6: 6 3 70 yes
# 7: 7 5 75 yes
# 8: 8 5 23 yes
# 9: 9 23 24 yes
# 10: 10 0 21 yes
df[, cat := fifelse(condition2, 'yes', 'no')]
id var1 var2 cat
# 1: 1 0 22 no
# 2: 2 4 4 yes
# 3: 3 5 6 yes
# 4: 4 6 25 yes
# 5: 5 99 6 no
# 6: 6 3 70 yes
# 7: 7 5 75 yes
# 8: 8 5 23 yes
# 9: 9 23 24 yes
# 10: 10 0 21 no