r - 根据逻辑列的顺序在 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 相对较新。
解决方案
如果在获取列的值时没有逻辑,并且您需要为可以使用的每个组合单独添加条件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
推荐阅读
- python - 如何从谷歌电子表格中形成字典并使用python中的单元格数据为其分配名称
- go - 使用 Golang 脚本构建 go wasm
- sql - SQL - Where *** Like '%**%' 查询
- zsh - 我不能在 macbook 中使用“mkdir”命令
- c# - 为什么 ChangeTracker.Load() 不加载我的所有导航属性?
- reactjs - history.push() 不起作用 - 更新 url 但不转移
- oauth-2.0 - 在 OpenID Connect 授权码流中使用的 clientSecret 如何?
- unity3d - 无法在 Unity 中使用 Steamworks.NET 获取或设置成就
- python - 如何先过滤数据框,然后匹配熊猫中的相同数据框?
- android - 隐藏键盘下的BottomNavigationView