如何使用dplyr::mutate_all对选定列进行舍入
我正在使用以下软件包版本如何使用dplyr::mutate_all对选定列进行舍入,r,dplyr,R,Dplyr,我正在使用以下软件包版本 # devtools::install_github("hadley/dplyr") > packageVersion("dplyr") [1] ‘0.5.0.9001’ 使用以下tibble: library(dplyr) df <- structure(list(gene_symbol = structure(1:6, .Label = c("0610005C13Rik", "0610007P14Rik", "0610009B22Rik", "06
# devtools::install_github("hadley/dplyr")
> packageVersion("dplyr")
[1] ‘0.5.0.9001’
使用以下tibble:
library(dplyr)
df <- structure(list(gene_symbol = structure(1:6, .Label = c("0610005C13Rik",
"0610007P14Rik", "0610009B22Rik", "0610009L18Rik", "0610009O20Rik",
"0610010B08Rik"), class = "factor"), fold_change = c(1.54037,
1.10976, 0.785, 0.79852, 0.91615, 0.87931), pvalue = c(0.5312,
0.00033, 0, 0.00011, 0.00387, 0.01455), ctr.mean_exp = c(0.00583,
59.67286, 83.2847, 6.88321, 14.67696, 1.10363), tre.mean_exp = c(0.00899,
66.22232, 65.37819, 5.49638, 13.4463, 0.97043), ctr.cv = c(5.49291,
0.20263, 0.17445, 0.46288, 0.2543, 0.39564), tre.cv = c(6.06505,
0.28827, 0.33958, 0.53295, 0.26679, 0.52364)), .Names = c("gene_symbol",
"fold_change", "pvalue", "ctr.mean_exp", "tre.mean_exp", "ctr.cv",
"tre.cv"), row.names = c(NA, -6L), class = c("tbl_df", "tbl",
"data.frame"))
但会出现以下错误:
Error in mutate_impl(.data, dots) :
3 arguments passed to 'round'which requires 1 or 2 arguments
dplyr 1.0.0的更新
cross()
函数替换了dplyr
动词的_if/_all/_at/_each变体。虽然更加“冗长”,但更新使tidyverse语言和代码更加一致和通用
以下是对指定列进行舍入的方法:
df%>%变异(穿过(2:7,圆形,3))
#按位置排列的第2-7列
df%>%mutate(跨越(cols,round,3))
#由变量cols指定的列
四舍五入所有数字列:
df%>%mutate(跨越(其中(是数字),圆形,3))
四舍五入所有列:(在这种情况下不起作用,因为gene_符号不是数字)
df%>%变异(跨越(所有内容(),圆形,3))
如果在的参数中有Where(is.numeric)
,则可以输入其他列规范,例如-1或-gene\u符号,以排除列1。有关更多选项,请参见tidyselect
由于某些列不是数字,您可以使用mutate_if
,并将列四舍五入(如果且仅当)为数字:
df%>%mutate\u if(is.numeric,round,3)
编辑:根据@JdP建议简化命令(funs
不需要)
packageVersion("dplyr")
[1] '0.7.6'
试一试
它起作用了 df%>%在(2:7,一轮,3)处变异。
@alistaire谢谢。如何使用变量cols
。我尝试了这个方法,错误是df%>%mutate\u all(cols,round,3)
df%>%mutate\u at(cols,round,3)
。因为它不是所有的列,它是mutate\u at
,而不是mutate\u all
。错误消息可能会更好。我不明白为什么在使用时,df%>%mutate\u at(cols,round(,3))
或df%>%mutate\u at(cols,round(,3))
失败。运算符在管道中,您正在将左侧插入到。是因此,您得到的是轮(df,3),这不是您想要的。您可以省略funs:df%>%mutate\u如果(是数值,轮,3)
简单的解决方案。但是可以使用is.double
而不是is.numeric
,来不转换整数变量。这对我不起作用,但是df%>%mutate(跨越(其中(is.numeric),round,3))didoop-现在已修复
Error in mutate_impl(.data, dots) :
3 arguments passed to 'round'which requires 1 or 2 arguments
packageVersion("dplyr")
[1] '0.7.6'
df %>% mutate_at(2:7, funs(round(., 3)))