我是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))
目标是创建一个新列,告诉我学生是否通过了课程。
答案 0 :(得分:1)
问题是if/else
没有被向量化。如果将函数更改为ifelse
,它将起作用。另一个问题是apply
与MARGIN
一起使用的是data.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)
答案 1 :(得分:0)
尝试:
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