首页 > 解决方案 > 如何根据列匹配值?

问题描述

我想根据 和 确定在特定日期进行的测量id长度id1。测量长度记录在d1...d5变量中,并d_day定义了我正在寻找的测量长度。例如,在第一种情况下,我在d3测量长度等于30. 我尝试了这些which功能,但肯定有更快的解决方案。

期望的输出

在此处输入图像描述

数据结构:

在此处输入图像描述

Sample data:

structure(list(id = c(101, 101), id_1 = c(1, 2), d1 = c(15, 0
), d2 = c(30, 15), d3 = c(25, 30), d4 = c(15, 30), d5 = c(15, 
60), d_day = c("d3", "d1")), class = c("spec_tbl_df", "tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -2L), spec = structure(list(
    cols = list(id = structure(list(), class = c("collector_double", 
    "collector")), id_1 = structure(list(), class = c("collector_double", 
    "collector")), d1 = structure(list(), class = c("collector_double", 
    "collector")), d2 = structure(list(), class = c("collector_double", 
    "collector")), d3 = structure(list(), class = c("collector_double", 
    "collector")), d4 = structure(list(), class = c("collector_double", 
    "collector")), d5 = structure(list(), class = c("collector_double", 
    "collector")), d_day = structure(list(), class = c("collector_character", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1L), class = "col_spec"))

标签: rdataframe

解决方案


这是否有效:

library(dplyr)
library(tidyr)
df %>% pivot_longer(-c(id, id_1, d_day)) %>% filter(d_day == name) %>% 
     select(id, id_1, 'd_day_h' = value)
# A tibble: 2 x 3
     id  id_1 d_day_h
  <dbl> <dbl>   <dbl>
1   101     1      25
2   101     2       0

推荐阅读