【问题标题】:Using bind_rows in a pipe在管道中使用 bind_rows
【发布时间】:2021-03-20 15:40:23
【问题描述】:

根据我今天遇到的一个问题,我想知道如何在管道中使用bind_rows 函数,同时避免重复和NA 值。考虑一下我有以下简单的小标题:

df <- tibble(
  col1 = c(3, 4, 5),
  col2 = c(5, 3, 1), 
  col3 = c(6, 4, 9),
  col4 = c(9, 6, 5)
)

我想将col1 和col2 与col3 和col4 按行绑定,这样我就有一个包含2 列和6 个观察值的小标题。最后将列的名称更改为colnew1 和colnew2。 但是当我使用bind_rows 时,我得到了以下输出,其中包含很多重复和NA 值。

df %>%
  bind_rows(
    select(., 1:2),
    select(., 3:4)
)

# A tibble: 9 x 4
   col1  col2  col3  col4
  <dbl> <dbl> <dbl> <dbl>
1     3     5     6     9
2     4     3     4     6
3     5     1     9     5
4     3     5    NA    NA
5     4     3    NA    NA
6     5     1    NA    NA
7    NA    NA     6     9
8    NA    NA     4     6
9    NA    NA     9     5

# My desired output would be something like this:

f1 <- function(x) {
  df <- x %>% 
    set_names(nm = rep(c("newcol1", "newcol2"), 2)) 
  bind_rows(df[, c(1, 2)], df[, c(3, 4)])
}

f1(df)
# A tibble: 6 x 2
  newcol1 newcol2
    <dbl>   <dbl>
1       3       5
2       4       3
3       5       1
4       6       9
5       4       6
6       9       5

我可以在没有管道的情况下获得所需的输出,但首先我想知道如何在管道中使用 bind_rows 而不会获得 NA 值和重复,其次我是否可以在 @987654336 中使用 select 函数@ 我记得有一次 Hadley Wickham 使用了由 bind_rows 包装的 filter 函数。

感谢您对此问题的任何解释,并提前感谢您。

【问题讨论】:

  • 你能提供你想要的输出吗?
  • 我刚刚在我的代码末尾添加了我想要的输出。

标签: r dplyr


【解决方案1】:

选择前两列和bind_rows col3 col4 到col1 和col2 然后使用transmute

df1 <- df %>%
  select(col1, col2) %>% 
      bind_rows(
        df %>% 
          transmute(col1 = col3, col2 = col4)
      )

结果:

# A tibble: 6 x 2
   col1  col2
  <dbl> <dbl>
1     3     5
2     4     3
3     5     1
4     6     9
5     4     6
6     9     5

【讨论】:

  • 能否将结果发布为代码而不是屏幕截图?
  • 好的,本。我以后会这样做!
猜你喜欢
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 2011-07-16
  • 2023-03-29
  • 2017-06-09
  • 2021-02-05
相关资源
最近更新 更多