R:使用“for”循环和“case_when”检查多个变量
我的数据集DT如下所示: 类别:1-9号 xxx,yyy,zzz:二进制0,1R:使用“for”循环和“case_when”检查多个变量,r,for-loop,case-when,R,For Loop,Case When,我的数据集DT如下所示: 类别:1-9号 xxx,yyy,zzz:二进制0,1 category xxx yyy zzz 8 1 0 0 1 0 0 0 4 0 1 1 9 0 0 1 8 0 1 0 我想使用“for”循环和“case_when”检查多个条件 因此,我希望数据在最后显示出来 category xxx yyy zzz result_xxx result_yyy
category xxx yyy zzz
8 1 0 0
1 0 0 0
4 0 1 1
9 0 0 1
8 0 1 0
我想使用“for”循环和“case_when”检查多个条件
因此,我希望数据在最后显示出来
category xxx yyy zzz result_xxx result_yyy result_zzz
8 1 0 0 8 0 0
1 0 0 0 0 0 0
4 0 1 1 0 4 4
9 0 0 1 0 0 9
8 0 1 0 0 8 0
为此,我编写了以下代码:
condition.vars <- c("xxx", "yyy", "zzz")
for(i in condition.vars){
browser()
DT <- DT[, condition:= case_when(
([[i]] == 1 & category ==1) ~ 1,
([[i]] == 1 & category ==2) ~ 2,
([[i]] == 1 & category ==3) ~ 3,
([[i]] == 1 & category ==4) ~ 4,
([[i]] == 1 & category ==5) ~ 5,
([[i]] == 1 & category ==6) ~ 6,
([[i]] == 1 & category ==7) ~ 7,
([[i]] == 1 & category ==8) ~ 8,
([[i]] == 1 & category ==9) ~ 9,
TRUE ~ 0
)]
setnames(DT, "condition", paste0("result", i))
}
正如你所预料的,它不起作用。
您能帮我更正代码吗?您不需要for循环或case\u。如果您有一个数据帧,可以将其简化为:
condition.vars <- c("xxx", "yyy", "zzz")
DT[paste0('result_', condition.vars)] <- DT$category * DT[condition.vars]
# category xxx yyy zzz result_xxx result_yyy result_zzz
#1 8 1 0 0 8 0 0
#2 1 0 0 0 0 0 0
#3 4 0 1 1 0 4 4
#4 9 0 0 1 0 0 9
#5 8 0 1 0 0 8 0
您不需要for循环或case_。如果您有一个数据帧,可以将其简化为:
condition.vars <- c("xxx", "yyy", "zzz")
DT[paste0('result_', condition.vars)] <- DT$category * DT[condition.vars]
# category xxx yyy zzz result_xxx result_yyy result_zzz
#1 8 1 0 0 8 0 0
#2 1 0 0 0 0 0 0
#3 4 0 1 1 0 4 4
#4 9 0 0 1 0 0 9
#5 8 0 1 0 0 8 0
我们可以使用tidyverse
我们可以使用tidyverse
这里有一个data.table选项
给
category xxx yyy zzz result_xxx result_yyy result_zzz
1: 8 1 0 0 8 0 0
2: 1 0 0 0 0 0 0
3: 4 0 1 1 0 4 4
4: 9 0 0 1 0 0 9
5: 8 0 1 0 0 8 0
这里有一个data.table选项
给
category xxx yyy zzz result_xxx result_yyy result_zzz
1: 8 1 0 0 8 0 0
2: 1 0 0 0 0 0 0
3: 4 0 1 1 0 4 4
4: 9 0 0 1 0 0 9
5: 8 0 1 0 0 8 0
谢谢你@Ronak Shah。不知何故,第一个建议不起作用,但第二个建议起作用!我还需要从多个角度开发视觉数据。我能再问你一个问题吗?如果“category”不是数字而是字符,那么我不需要在什么时候使用case_吗?第一个用于数据帧,因为您有datatable,第二个答案就可以了。我仍然不会使用case_,因为对于角色,如果您有角色,可以使用lapply的其他方法。你可以有很多任意长度的字符。在这里不可行的情况下,一个接一个地写下每个条件。谢谢@Ronak Shah。不知何故,第一个建议不起作用,但第二个建议起作用!我还需要从多个角度开发视觉数据。我能再问你一个问题吗?如果“category”不是数字而是字符,那么我不需要在什么时候使用case_吗?第一个用于数据帧,因为您有datatable,第二个答案就可以了。我仍然不会使用case_,因为对于角色,如果您有角色,可以使用lapply的其他方法。你可以有很多任意长度的字符。在此处不可行时,使用案例_逐个编写每个条件。
category xxx yyy zzz result_xxx result_yyy result_zzz
1: 8 1 0 0 8 0 0
2: 1 0 0 0 0 0 0
3: 4 0 1 1 0 4 4
4: 9 0 0 1 0 0 9
5: 8 0 1 0 0 8 0