Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将函数应用于组的组合,固定1个组_R_Dplyr - Fatal编程技术网

R 将函数应用于组的组合,固定1个组

R 将函数应用于组的组合,固定1个组,r,dplyr,R,Dplyr,我有一些数据看起来像: grp date id Y <chr> <dttm> <chr> <dbl> 1 group1 2020-09-01 00:00:00 04003 17039. 2 group1 2020-09-01 00:00:00 04006 13233. 3 group1 2020-09-01 0

我有一些数据看起来像:

   grp    date                id              Y
   <chr>  <dttm>              <chr>       <dbl>
 1 group1 2020-09-01 00:00:00 04003      17039.
 2 group1 2020-09-01 00:00:00 04006      13233.
 3 group1 2020-09-01 00:00:00 04011_AM    7918.
 4 group1 2020-09-01 00:00:00 0401301_AD 22586.
 5 group1 2020-09-01 00:00:00 0401303    20527.
 6 group1 2020-09-01 00:00:00 0401305    29422.
 7 group2 2020-09-01 00:00:00 22017_AM    7088.
 8 group2 2020-09-01 00:00:00 22021_AM    8134.
 9 group2 2020-09-01 00:00:00 22039_AM   15842.
10 group2 2020-09-01 00:00:00 22048      16142.
编辑:

我希望申请以下职位:

#Min / max from group1 and group2
    data %>% 
      filter(grp == "group1" | grp == "group2") %>% 
      mutate(
        normedOut = normaliseData(Y)
      )

#Min / max from group1 and group3
    data %>% 
      filter(grp == "group1" | grp == "group3") %>% 
      mutate(
        normedOut = normaliseData(Y)
      )

#Min / max from group1 and group4
    data %>% 
      filter(grp == "group1" | grp == "group4") %>% 
      mutate(
        normedOut = normaliseData(Y)
      )

根据我对您问题的理解,这里有一个选项带有
purr
。我们创建了一个向量,
groups
,其中包含我们感兴趣的组,用于将group1固定的三对进行循环。我们使用所需的过滤器和变异序列,然后在包含规范化数据的
向量中创建为每个组命名的列。这将产生一个包含3个新列的数据帧,每列表示组1和另一个组之间的标准化Y。NAs将在没有对的位置(例如组2和组3之间)填充

组%
purrr::映射\u dfr(~data%>%
过滤器(grp==“group1”| grp==.x)%>%
变异(!!.x:=normaliseData(Y)))

为了澄清您想要的输出是什么,如果您想要对组1+2的Y进行规范化,就是(m-min(group2))/(max(group2)-min(group2)),我添加了一个小编辑,其中包含一些代码来说明我试图做的事情。这不是期望的输出,我认为这是尝试代码。您的三个代码块都写入
normedOut
,是否打算独立使用这三个帧?有什么问题吗?您是否打算添加三列,每对组一列?我给出的代码不能推广到更多的组。我计划对分组数据进行一些回归。我最初的想法是把它们放在同一个专栏里。好吧,我发现了一个问题。行1与
group1
关联。您需要一个新列来表示
group
group2
之间的规范化数据,这很好,可以放在该行上。但是在
group1
group3
之间标准化的
Y
的值放在哪里?
data <- structure(list(grp = c("group1", "group1", "group1", "group1", 
"group1", "group1", "group2", "group2", "group2", "group2", "group2", 
"group2", "group3", "group3", "group3", "group3", "group3", "group3", 
"group4", "group4", "group4", "group4", "group4", "group4"), 
    date = structure(c(1598918400, 1598918400, 1598918400, 1598918400, 
    1598918400, 1598918400, 1598918400, 1598918400, 1598918400, 
    1598918400, 1598918400, 1598918400, 1598918400, 1598918400, 
    1598918400, 1598918400, 1598918400, 1598918400, 1598918400, 
    1598918400, 1598918400, 1598918400, 1598918400, 1598918400
    ), tzone = "UTC", class = c("POSIXct", "POSIXt")), id = c("04003", 
    "04006", "04011_AM", "0401301_AD", "0401303", "0401305", 
    "22017_AM", "22021_AM", "22039_AM", "22048", "22053_AM", 
    "22054_AM", "28002", "28004", "2800501", "2800502", "2800503", 
    "2800504", "31010_AM", "31015_AM", "31016", "31019_AM", "31023", 
    "31029_AM"), Y = c(17039.329, 13232.982, 7917.693, 22585.676, 
    20527.113, 29422.471, 7087.536, 8134.265, 15842.035, 16142.111, 
    11493.981, 6556.387, 22086.768, 11325.882, 53449.067, 83662.101, 
    78508.089, 66107.125, 5095.169, 5590.531, 17796.439, 6028.701, 
    39271.698, 3642.281)), row.names = c(NA, -24L), groups = structure(list(
    grp = c("group1", "group2", "group3", "group4"), .rows = structure(list(
        1:6, 7:12, 13:18, 19:24), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), row.names = c(NA, 4L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))
#Min / max from group1 and group2
    data %>% 
      filter(grp == "group1" | grp == "group2") %>% 
      mutate(
        normedOut = normaliseData(Y)
      )

#Min / max from group1 and group3
    data %>% 
      filter(grp == "group1" | grp == "group3") %>% 
      mutate(
        normedOut = normaliseData(Y)
      )

#Min / max from group1 and group4
    data %>% 
      filter(grp == "group1" | grp == "group4") %>% 
      mutate(
        normedOut = normaliseData(Y)
      )
groups <- c("group2", "group3", "group4")
groups %>%
  purrr::map_dfr(~ data %>%
        filter(grp == "group1" | grp == .x) %>%
        mutate(!!.x := normaliseData(Y)))