在行上应用函数
applying functions over rows
我正在使用 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)
(在 base R 中)是否可以编写命令:“select 行,其中“var_1”和“var_2”的值都大于 2? (即 select 行中最小值大于 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)
但是有没有更快的方法(当有更多列时)在整个 table(适用的情况下)应用函数“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))
对于 select 行,其中 var1
和 var2
大于 2,您可以这样做:
subset(f, var_1 > 2 & var_2 > 2)
可以在dplyr::filter
中应用相同的代码
dplyr::filter(f, var_1 > 2 & var_2 > 2)
我正在使用 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)
(在 base R 中)是否可以编写命令:“select 行,其中“var_1”和“var_2”的值都大于 2? (即 select 行中最小值大于 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)
但是有没有更快的方法(当有更多列时)在整个 table(适用的情况下)应用函数“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))
对于 select 行,其中 var1
和 var2
大于 2,您可以这样做:
subset(f, var_1 > 2 & var_2 > 2)
可以在dplyr::filter
dplyr::filter(f, var_1 > 2 & var_2 > 2)