我正在尝试创建一个二进制文件 T
/F
列,即 T
如果 1 出现在数据帧的特定行中。
df <- tibble(
d1 = c(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
d2 = c(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),
d3 = c(0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
d4 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0),
d5 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
d6 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
d7 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0),
d8 = c(0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0)
)
我可以使用以下方法来实现我想要的:
df$d9 <- NA
df$d9[df$d1 == 1] <- TRUE
df$d9[df$d2 == 1] <- TRUE
df$d9[df$d3 == 1] <- TRUE
df$d9[df$d4 == 1] <- TRUE
df$d9[df$d5 == 1] <- TRUE
df$d9[df$d6 == 1] <- TRUE
df$d9[df$d7 == 1] <- TRUE
df$d9[df$d8 == 1] <- TRUE
结果是:
d1 d2 d3 d4 d5 d6 d7 d8 d9
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <lgl>
1 1 0 0 0 0 0 0 0 TRUE
2 0 0 0 0 0 0 0 0 NA
3 0 0 1 0 0 0 0 0 TRUE
4 0 0 0 0 0 0 0 0 NA
5 0 0 0 0 0 0 0 0 NA
6 0 0 0 0 0 0 0 0 NA
7 0 0 0 0 0 0 0 1 TRUE
8 0 1 0 0 0 0 0 0 TRUE
9 0 0 0 0 0 0 0 0 NA
10 0 0 0 0 0 0 0 0 NA
11 0 0 0 1 0 0 1 0 TRUE
12 0 0 0 0 0 0 0 0 NA
13 0 0 0 0 0 0 0 0 NA
14 0 0 0 0 0 0 0 0 NA
15 0 0 0 0 0 0 0 0 NA
但我确信一定有更优雅的解决方案来解决这个问题。
首先,我希望能够创建一个包含需要检查的列名的变量,即 dfCols <- c("d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8")
并在检查时调用它,而不是显式调用 'd1'、'd2' 等中的每一个。
我也觉得一定有一个 tidyverse/dplyr 解决方案,但一直在努力寻找一个。
基于此处提供的出色答案以及针对类似问题的类似 SO 条目 found here ,我能够开发出我需要的解决方案。
首先,虽然我的可重现示例包含整数,但我也想使用字符数据,按照这个小标题:
df <- tibble(
d1 = c('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'),
d2 = c('b', 'a', 'b', 'a', 'a', 'a', 'a', 'a'),
d3 = c('a', 'a', 'a', 'c', 'a', 'b', 'a', 'a'),
d4 = c('a', 'a', 'a', 'a', 'a', 'a', 'a', 'd'),
d5 = c('a', 'c', 'a', 'a', 'a', 'a', 'a', 'a'),
d6 = c('a', 'a', 'a', 'b', 'a', 'a', 'e', 'a'),
d7 = c('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'),
d8 = c('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a')
)
其次,为了便于使用,我希望能够指定我要检查的列:
cols <- c('d2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8')
最后,我希望能够传递一个测试字符列表来检查它们是否在行中:
bcde <- c('b', 'c', 'd', 'e')
以下代码满足这些条件:
df <- df %>%
mutate(
d9 = case_when(
if_any(all_of(cols), ~ . %in% bcde) ~ 1,
TRUE ~ 0)
)
相关文章:
javascript - 在javascript中找到嵌套数组中的最低值
c# - 从 C# 中的 Win32_PnPEntity 获取 DEVPKEY_Device_Bus
node.js - Docker + WebGL + Headless Chrome 错误 : Pa
visual-studio - 缺少 Visual Studio 性能探查器
javascript - 正则表达式获取第一次和最后一次出现之间的子字符串
python - 如何确定 Pandas DataFrame 中给定 x 和 y 坐标列的象限
c++ - 在 C++ 中的 unordered_map 中排序