将函数应用于数据框列的每个元素
apply a function to each element of a column of a dataframe
我是 R 的新手,我有一个问题,我有一个数据框,我想将此函数应用于 G3 列的每个元素
fun_pass <- function(calif){
if(calif >= 10){
x <- 1
}else{
x <-0
}
return(x)
}
问题是函数只作用于mat_data$G3列的第一个元素,填充新的mat_data$pass 具有该单个值的列。
我申请这个:
mat_data$pass <- apply(mat_data$G3,2,fun_pass(mat_data$G3))
目标是有一个新的专栏,告诉我学生是否通过了课程。
问题出在未向量化的 if/else
上。如果我们将函数更改为 ifelse
,它就会起作用。另一个问题是 apply
和 MARGIN
它需要一个数据。frame/matrix。在这里,它正在提取一个 vector
'G3'
fun_pass <- function(calif) ifelse(calif >= 10, 1, 0)
这里不需要ifelse
也
fun_pass <- function(calif) as.integer(calif >= 10)
如果是单列,使用
mat_data$pass <- fun_pass(mat_data$G3)
尝试:
mat_data$pass <- sapply(X = mat_data$G3, FUN = fun_pass)
测试:
mat_data <- data.frame(G3 = 1:20)
mat_data$pass <- sapply(X = mat_data$G3, FUN = fun_pass)
mat_data
# G3 pass
# 1 1 0
# 2 2 0
# 3 3 0
# 4 4 0
# 5 5 0
# 6 6 0
# 7 7 0
# 8 8 0
# 9 9 0
# 10 10 1
# 11 11 1
# 12 12 1
# 13 13 1
# 14 14 1
# 15 15 1
# 16 16 1
# 17 17 1
# 18 18 1
# 19 19 1
# 20 20 1
我是 R 的新手,我有一个问题,我有一个数据框,我想将此函数应用于 G3 列的每个元素
fun_pass <- function(calif){
if(calif >= 10){
x <- 1
}else{
x <-0
}
return(x)
}
问题是函数只作用于mat_data$G3列的第一个元素,填充新的mat_data$pass 具有该单个值的列。
我申请这个:
mat_data$pass <- apply(mat_data$G3,2,fun_pass(mat_data$G3))
目标是有一个新的专栏,告诉我学生是否通过了课程。
问题出在未向量化的 if/else
上。如果我们将函数更改为 ifelse
,它就会起作用。另一个问题是 apply
和 MARGIN
它需要一个数据。frame/matrix。在这里,它正在提取一个 vector
'G3'
fun_pass <- function(calif) ifelse(calif >= 10, 1, 0)
这里不需要ifelse
也
fun_pass <- function(calif) as.integer(calif >= 10)
如果是单列,使用
mat_data$pass <- fun_pass(mat_data$G3)
尝试:
mat_data$pass <- sapply(X = mat_data$G3, FUN = fun_pass)
测试:
mat_data <- data.frame(G3 = 1:20)
mat_data$pass <- sapply(X = mat_data$G3, FUN = fun_pass)
mat_data
# G3 pass
# 1 1 0
# 2 2 0
# 3 3 0
# 4 4 0
# 5 5 0
# 6 6 0
# 7 7 0
# 8 8 0
# 9 9 0
# 10 10 1
# 11 11 1
# 12 12 1
# 13 13 1
# 14 14 1
# 15 15 1
# 16 16 1
# 17 17 1
# 18 18 1
# 19 19 1
# 20 20 1