R中的矢量化条件输出(可能使用purrr)?

Dan*_*kin 4 r conditional-statements purrr

我正在尝试创建数据框的矢量化条件输出。

假设我有数据框:

data <- data.frame(a = c(5, 3, 9, 5),
                   b = c(1, 2, 3, 4),
                   c = c(5, 3, 9, 5),
                   d = c(5, 3, 9, 5))
Run Code Online (Sandbox Code Playgroud)

和门槛:

threshold <- c(a1 = 4, b1 = 2, c1 = 8, d1 = 2)
Run Code Online (Sandbox Code Playgroud)

我想要的是一个新的数据集,表明a的每个值是否大于或等于阈值向量(a1)中的对应值,b的每个值是否大于或等于阈值向量(b1)中的对应值), 等等。

所以期望的输出是:

desired_data <- data.frame(a = c(1, 0, 1, 1),
                           b = c(0, 1, 1, 1),
                           c = c(0, 0, 1, 0),
                           d = c(1, 1, 1, 1))
Run Code Online (Sandbox Code Playgroud)

我想尽可能简单地做到这一点,最好使用purrr函数。

这是一个错误的尝试:

desired_data <- map(data >= threshold)

我觉得map2可能很有希望,并检查了文档(例如,herehere),但我似乎无法获得基于映射的条件输出的语法。

谢谢!

Ale*_*lok 5

您的想法是map2():由于数据框是列列表,因此您可以在列上循环。小困难是最后将所有内容放入数据框中,如果您使用map2_df().

map2_df(threshold, data, ~ .y >= .x)
Run Code Online (Sandbox Code Playgroud)

如果您希望将这些逻辑值转换为整数:

1L * map2_df(threshold, data, ~ .y >= .x)
#   a1 b1 c1 d1
# 1  1  0  0  1
# 2  0  0  0  1
# 3  1  1  1  1
# 4  1  1  0  1
Run Code Online (Sandbox Code Playgroud)