我刚刚观察到一种非常奇怪的行为,在将paste0
和paste
与mutate
进行比较时,我无法解释:
mtcars %>% group_by(cyl) %>% ungroup() %>% mutate(`newcol ss` = paste0(as.character(wt), as.character(drat), collapse=";"))
使用paste0
的上述代码输出如下:
mtcars %>% group_by(cyl) %>% ungroup() %>% mutate(`newcol ss` = paste(as.character(wt), as.character(drat)))
基本上,mutate适用于paste
(逐行组合),而paste0
组合了单个单元格中的所有列和行。
答案 0 :(得分:1)
collapse = ", "
是导致问题的原因。
尝试将collapse
放在paste
中,将获得相同的结果,除了在两列的值之间添加空格。
paste
和paste0
的差异并不是结果的差异。
尝试了解paste
和paste0
的使用情况以及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)