emr*_*mr2 2 logarithm r dataframe dplyr
这是我的数据:
\ndat <- mtcars\ndat$Brands <- rownames(dat)\ndat$Info <- rep("Info", length(rownames(mtcars)))\nRun Code Online (Sandbox Code Playgroud)\n我已经看到有很多方法可以对整个数据框架执行某些操作。mutate,sapply等等。但是,对于某些特定功能它不起作用。
最接近的例子是如果你想做的话log2+1。
我已经尝试过这个...
\ndata_log <- dat %>% mutate(across(where(is.numeric), log2+1))\nRun Code Online (Sandbox Code Playgroud)\n但这给了我这个错误......
\n\n\n错误:
\nmutate()输入有问题..1。\n\xe2\x84\xb9..1 = across(where(is.numeric), log2 + 1)。\nx 二元运算符的非数字参数\n运行rlang::last_error()以查看发生错误的位置。
您知道是否有办法运行此类功能?
\n您的方法是正确的,但语法需要一些更正。这里需要使用 lambda 或匿名函数。
使用dplyr您可以用作across-
library(dplyr)
dat <- dat %>% mutate(across(where(is.numeric), ~log2(.) +1))
Run Code Online (Sandbox Code Playgroud)
或者以 R 为基数 -
cols <- sapply(dat, is.numeric)
dat[cols] <- lapply(dat[cols], function(x) log2(x) + 1)
Run Code Online (Sandbox Code Playgroud)