【问题标题】:paste() in dplyr mutate does not compute rowwise?dplyr mutate 中的 paste() 不按行计算?
【发布时间】:2022-11-20 04:58:31
【问题描述】:

这是我第一次发帖 :) 所以我今天遇到了一些奇怪的行为:使用 dplyr 时变异与功能一起粘贴函数,每一行的结果都是相同的。

这是一个例子:

vec1 <- c(2, 5)
vec2 <- c(4, 6)

test_df <- data.frame(vec1, vec2)
test_df %>% mutate(new_col = paste(vec1:vec2, collapse = ","))

与输出

  vec1 vec2 new_col
1    2    4   2,3,4
2    5    6   2,3,4

但这不是我想要或期望的。

这是我想要的,通过循环实现:

df <- test_df %>% mutate(new_col = 1)
for(i in 1:nrow(test_df)){
  df$new_col[i] <- paste(df$vec1[i]:df$vec2[i], collapse = ",")
}

随着输出:

  vec1 vec2 new_col
1    2    4   2,3,4
2    5    6     5,6

发生了什么事,我怎样才能达到同样的效果变异粘贴

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以通过将vec1vec2元素与map2pastestr_c)序列值循环到单个字符串来获取sequence

    library(dplyr)
    library(purrr)
    library(stringr)
    test_df %>% 
      mutate(new_col = map2_chr(vec1, vec2, ~ str_c(.x:.y, collapse = ",")))
    

    -输出

     vec1 vec2 new_col
    1    2    4   2,3,4
    2    5    6     5,6
    

    rowwise

    test_df %>%
       rowwise %>%
       mutate(new_col = str_c(vec1:vec2, collapse  = ",")) %>% 
       ungroup
    # A tibble: 2 × 3
       vec1  vec2 new_col
      <dbl> <dbl> <chr>  
    1     2     4 2,3,4  
    2     5     6 5,6    
    

    【讨论】:

      猜你喜欢
      • 2015-06-17
      • 1970-01-01
      • 2021-04-23
      • 2015-02-05
      • 2018-06-11
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      相关资源
      最近更新 更多