将函数应用于数据框列的每个元素

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,它就会起作用。另一个问题是 applyMARGIN 它需要一个数据。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