r - 在行上应用函数

标签 r function row multiple-columns

我正在使用 R 编程语言。我有兴趣看看是否可以在整行上应用函数。

例如,假设我有一个像这样的数据框:

var_1 <- rnorm(10000,1,4)
var_2<-rnorm(10000,10,5)
var_3 <- sample( LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
response_variable <- sample( LETTERS[1:2], 10000, replace=TRUE, prob=c(0.4, 0.6) )


#put them into a data frame called "f"
f <- data.frame(var_1, var_2, var_3, response_variable)

#declare var_3 and response_variable as factors
f$response_variable = as.factor(f$response_variable)
f$var_3 = as.factor(f$var_3)

(以R为基础)是否可以编写一个命令:“选择“var_1”和“var_2”的值都大于2的行?(即选择该行中的最小值大于2的行) 2).我可以单独编写一个“if else”语句,但假设有很多列 - 是否可以在不指定每一列的情况下执行此操作?

同样的方式 - 是否可以同时在多个列上应用一个函数?

假设有以下函数:

ihs <- function(x) {
    y <- log(x + sqrt(x ^ 2 + 1))
    return(y)
}

我可以写:

f$var_1 = ihs(f$var_1)
f$var_2 = ihs(f$var_2)

但是有没有一种更快的方法(当有更多列时)将函数“ihs”应用于整个表格(如果适用)?

最佳答案

base R中,可以在对感兴趣的列('nm1')进行子集化后使用lapply来完成

nm1 <- grep('^var_\\d+$', names(f), value = TRUE)
f[nm1] <- lapply(f[nm1], ihs)

如果函数需要基于type(即数字列)应用,并且仅当min值大于2时才应用函数

i1 <- sapply(f, is.numeric)
i2 <- do.call(pmin, f[i1]) > 2

或者也可以使用rowSums来完成

i2 <- rowSums(f[i1] >2) == length(i1)
f[i2, i1] <- lapply(f[i2, i1], ihs)

或者如果我们想使用tidyverse

library(dplyr)
f <- f %>%
         mutate(across(where(is.numeric), ihs))

关于r - 在行上应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65514715/

相关文章:

c - 将列表指针发送到函数

arrays - 如果在多个数组中找到,则删除行

用前导行或滞后行替换行信息 - R

r - 大数据的kmeans

javascript - 我需要添加一个加载一次的 JavaScript 加载函数

r - data.table包中点函数 `.()`的实现

css - Bootstrap 行宽

python - 在 Bash 中,修改文件中的列和行

python - R正则表达式从字符串中提取信息

java - RserveException : eval failed Syntax error