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可能很有希望,并检查了文档(例如,here和here),但我似乎无法获得基于映射的条件输出的语法。
谢谢!
您的想法是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)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |