首页 > 解决方案 > 根据逻辑列的顺序在 DF 中创建多个新列

问题描述

我正在尝试创建三个新列,其值取决于三个逻辑类型列的特定顺序。

例如我有这个:

     a     b    c 
1 TRUE  TRUE TRUE
2 TRUE FALSE TRUE
3 TRUE FALSE TRUE

并且取决于是否跨行,值是 TRUE、TRUE、TRUE,如第 1 行,然后创建三个新列,其值为 1、1、1,但如果顺序为 TRUE、FALSE、TRUE,如第 2 行和第 3 行,则值将是 2,3,3。请注意,TRUE 的值不 = 1,而是我根据所有三个逻辑值定义的值(总共 8 种可能的组合,每个组合由三个单独的数字定义)。所以我得到这样的东西:

     a     b    c d e f
1 TRUE  TRUE TRUE 5 5 2
2 TRUE FALSE TRUE 2 3 3
3 TRUE FALSE TRUE 2 3 3

如果有人能指出我正确的方向以尽可能有效地做到这一点,我将不胜感激,因为我对 R 相对较新。

标签: rdataframetidyversedata-wrangling

解决方案


如果在获取列的值时没有逻辑,并且您需要为可以使用的每个组合单独添加条件if/ else

df[c('d', 'e', 'f')] <- t(apply(df, 1, function(x) {
                          if (x[1] && x[2] && x[3]) c(5, 5, 2)
                          else if (x[1] && !x[2] && x[3]) c(2, 3, 3)
                          #add more conditions
                          #....
                          }))

df
#     a     b    c d e f
#1 TRUE  TRUE TRUE 5 5 2
#2 TRUE FALSE TRUE 2 3 3
#3 TRUE FALSE TRUE 2 3 3

推荐阅读