代码之家  ›  专栏  ›  技术社区  ›  Brian Smith

如何正确使用dplyr中的管道操作符

  •  2
  • Brian Smith  · 技术社区  · 3 年前

    library(dplyr)
    library(zoo)
    data.frame('col1' = c('C', 'A', 'B', 'A'), 'col2' = c(1,2,3,4)) %>%
        apply(as.matrix(.),
                1,
                function(ii) {
                    merge(data.frame('xx' = sample(letters[1:10], 5, replace = T), 'val1' = 1:5),
                            data.frame('xx' = sample(letters[1:5], 5, replace = T), 'val2' = 21:25),
                            by = 'xx', all = T) %>%
                    mutate('Info' = ii['col1']) %>%
                    `colnames<-`(c('yy0', 'yy1', 'yy2', 'yy3'))
    
                })
    

    有了这段代码,我得到了下面的错误

    Error in match.fun(FUN) : '1' is not a function, character or symbol
    

    如果我使用正常计算而不使用 pipe 操作人员

    你能帮助我如何从家长那里获取信息吗 dataframe

    例如,我想在apply中使用以下代码:

    而不是

    mutate('Info' = ii['col1'])
    

    我想用

    mutate('Info' = <<min of the column 'col2' in parent dataframe>>)
    

    1 回复  |  直到 3 年前
        1
  •  1
  •   akrun    3 年前

    把包起来就行了 apply 分属 {} 阻止代码

    data.frame('col1' = c('C', 'A', 'B', 'A'), 'col2' = c(1,2,3,4)) %>% {
        apply(as.matrix(.),
                1,
                function(ii) {
                    merge(data.frame('xx' = sample(letters[1:10], 5, replace = T), 'val1' = 1:5),
                            data.frame('xx' = sample(letters[1:5], 5, replace = T), 'val2' = 21:25),
                            by = 'xx', all = T) %>%
                    mutate('Info' = ii['col1']) %>%
                    `colnames<-`(c('yy0', 'yy1', 'yy2', 'yy3'))
    
                })}
    

    -输出

    [[1]]
      yy0 yy1 yy2 yy3
    1   a   1  22   C
    2   b   5  NA   C
    3   c  NA  25   C
    4   e  NA  21   C
    5   e  NA  23   C
    6   e  NA  24   C
    7   h   4  NA   C
    8   j   2  NA   C
    9   j   3  NA   C
    
    [[2]]
       yy0 yy1 yy2 yy3
    1    a   1  22   A
    2    a   1  23   A
    3    a   2  22   A
    4    a   2  23   A
    5    b  NA  21   A
    6    b  NA  25   A
    7    c   5  NA   A
    8    d  NA  24   A
    9    e   4  NA   A
    10   j   3  NA   A
    
    [[3]]
      yy0 yy1 yy2 yy3
    1   a  NA  25   B
    2   b  NA  24   B
    3   c  NA  22   B
    4   d   4  23   B
    5   d   5  23   B
    6   e  NA  21   B
    7   g   2  NA   B
    8   h   1  NA   B
    9   h   3  NA   B
    
    [[4]]
      yy0 yy1 yy2 yy3
    1   a   4  22   A
    2   a   4  23   A
    3   b  NA  25   A
    4   d  NA  21   A
    5   e   3  24   A
    6   f   1  NA   A
    7   h   5  NA   A
    8   j   2  NA   A
    

    如果需要父数据集,请创建一个对象

    data.frame('col1' = c('C', 'A', 'B', 'A'), 'col2' = c(1,2,3,4)) %>% {  tmp <- .
        apply(as.matrix(.),
                1,
                function(ii) {
                    merge(data.frame('xx' = sample(letters[1:10], 5, replace = T), 'val1' = 1:5),
                            data.frame('xx' = sample(letters[1:5], 5, replace = T), 'val2' = 21:25),
                            by = 'xx', all = T) %>%
                    mutate('Info' =tmp[['col1']][which.min(tmp[['col2']])]) %>%
                    `colnames<-`(c('yy0', 'yy1', 'yy2', 'yy3'))
    
                })}
    

    -输出

    [[1]]
      yy0 yy1 yy2 yy3
    1   a  NA  21   C
    2   a  NA  22   C
    3   b   5  23   C
    4   b   5  24   C
    5   c   4  NA   C
    6   d   1  25   C
    7   f   3  NA   C
    8   g   2  NA   C
    
    [[2]]
      yy0 yy1 yy2 yy3
    1   a   4  22   C
    2   a   4  24   C
    3   c   2  21   C
    4   d  NA  23   C
    5   e  NA  25   C
    6   g   3  NA   C
    7   h   5  NA   C
    8   i   1  NA   C
    
    [[3]]
       yy0 yy1 yy2 yy3
    1    a   2  22   C
    2    c   3  21   C
    3    c   3  24   C
    4    c   3  25   C
    5    c   4  21   C
    6    c   4  24   C
    7    c   4  25   C
    8    e  NA  23   C
    9    i   5  NA   C
    10   j   1  NA   C
    
    [[4]]
      yy0 yy1 yy2 yy3
    1   a   1  NA   C
    2   b  NA  24   C
    3   c   3  23   C
    4   c   3  25   C
    5   d   5  NA   C
    6   e  NA  21   C
    7   e  NA  22   C
    8   h   2  NA   C
    9   h   4  NA   C