R mutate()使用paste0()

时间:2018-04-19 04:58:20

标签: r dplyr mutate

我刚刚观察到一种非常奇怪的行为,在将paste0pastemutate进行比较时,我无法解释:

mtcars %>% group_by(cyl) %>% ungroup() %>% mutate(`newcol ss` = paste0(as.character(wt), as.character(drat), collapse=";"))

使用paste0的上述代码输出如下:

enter image description here

mtcars %>% group_by(cyl) %>% ungroup() %>% mutate(`newcol ss` = paste(as.character(wt), as.character(drat)))

paste()函数的输出如下: enter image description here

基本上,mutate适用于paste(逐行组合),而paste0组合了单个单元格中的所有列和行。

2 个答案:

答案 0 :(得分:1)

collapse = ", "是导致问题的原因。

尝试将collapse放在paste中,将获得相同的结果,除了在两列的值之间添加空格。

pastepaste0的差异并不是结果的差异。

尝试了解pastepaste0的使用情况以及collapse的使用情况。

[[另外,正如griffinevo和Kim在上面的评论中提到的那样,坚持使用更简单的代码。 ]

答案 1 :(得分:1)

删除collapse(并在" "函数中添加paste0)以匹配使用paste时的结果:

mtcars %>% group_by(cyl) %>% ungroup() %>% mutate(`newcol ss` = paste0(as.character(wt), " ", as.character(drat)))

您也可以使用paste生成奇怪的结果:

mtcars %>% group_by(cyl) %>% ungroup() %>% mutate(`newcol ss` = paste(as.character(wt), as.character(drat), collapse = ";"))

> mtcars %>% group_by(cyl) %>% ungroup() %>% mutate(`newcol ss` = paste(as.character(wt), as.character(drat), collapse = ";"))
# A tibble: 32 x 13
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb ss           `newcol ss`                                                         
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>        <chr>                                                               
 1  21.0    6.  160.  110.  3.90  2.62  16.5    0.    1.    4.    4. "2.623.9 "   2.62 3.9;2.875 3.9;2.32 3.85;3.215 3.08;3.44 3.15;3.46 2.76;3.57 3.~
 2  21.0    6.  160.  110.  3.90  2.88  17.0    0.    1.    4.    4. "2.8753.9 "  2.62 3.9;2.875 3.9;2.32 3.85;3.215 3.08;3.44 3.15;3.46 2.76;3.57 3.~
 3  22.8    4.  108.   93.  3.85  2.32  18.6    1.    1.    4.    1. "2.323.85 "  2.62 3.9;2.875 3.9;2.32 3.85;3.215 3.08;3.44 3.15;3.46 2.76;3.57 3.~
 4  21.4    6.  258.  110.  3.08  3.22  19.4    1.    0.    3.    1. "3.2153.08 " 2.62 3.9;2.875 3.9;2.32 3.85;3.215 3.08;3.44 3.15;3.46 2.76;3.57 3.~
 5  18.7    8.  360.  175.  3.15  3.44  17.0    0.    0.    3.    2. "3.443.15 "  2.62 3.9;2.875 3.9;2.32 3.85;3.215 3.08;3.44 3.15;3.46 2.76;3.57 3.~
 6  18.1    6.  225.  105.  2.76  3.46  20.2    1.    0.    3.    1. "3.462.76 "  2.62 3.9;2.875 3.9;2.32 3.85;3.215 3.08;3.44 3.15;3.46 2.76;3.57 3.~
 7  14.3    8.  360.  245.  3.21  3.57  15.8    0.    0.    3.    4. "3.573.21 "  2.62 3.9;2.875 3.9;2.32 3.85;3.215 3.08;3.44 3.15;3.46 2.76;3.57 3.~
 8  24.4    4.  147.   62.  3.69  3.19  20.0    1.    0.    4.    2. "3.193.69 "  2.62 3.9;2.875 3.9;2.32 3.85;3.215 3.08;3.44 3.15;3.46 2.76;3.57 3.~
 9  22.8    4.  141.   95.  3.92  3.15  22.9    1.    0.    4.    2. "3.153.92 "  2.62 3.9;2.875 3.9;2.32 3.85;3.215 3.08;3.44 3.15;3.46 2.76;3.57 3.~
10  19.2    6.  168.  123.  3.92  3.44  18.3    1.    0.    4.    4. "3.443.92 "  2.62 3.9;2.875 3.9;2.32 3.85;3.215 3.08;3.44 3.15;3.46 2.76;3.57 3.~
# ... with 22 more rows

就个人而言,我会使用不那么复杂的代码:

mtcars$ss <- paste0(mtcars$wt, " ", mtcars$drat)