Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用dplyr::mutate_all对选定列进行舍入_R_Dplyr - Fatal编程技术网

如何使用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)))