r - 一个函数中有两个以上的apply()
问题描述
我有学生在考试中回答的数据。我写了一些代码来计算正确和错误的答案,比如
`ncorrect <- function(resp,keyt){
cr <- sum(resp == keyt, na.rm = T)
return(cr)
}
nfalse <- function(resp,keyt){
fl <- sum(resp != keyt, na.rm = T)
return(fl)
}`
我想将这些数据绑定到我的数据框中并编写了类似的代码
checkscores <- function(frame){
frame$ncorrect <- apply(frame,1,ncorrect,keyt=frame[1,])
frame$nfalse <- apply(frame,1,nfalse,keyt=frame[1,])
return(frame)
}
但是该行frame$nfalse <- apply(frame,1,nfalse,keyt=frame[1,])
使用框架作为上一行,因此它为数据提供了加法+1。我怎样才能解决这个问题 ?感谢您的关注
编辑:
V2 V3 V4 V5 V6 ncorrect nfalse
key A B C D A 5 0
ahmet A <NA> <NA> D A 3 0
canan A D <NA> D A 3 1
kemal D C B A A 1 4
meral A B C D D 4 1
ziya C C C D A 3 2
mine <NA> A C D <NA> 2 1
V2 V3 V4 V5 V6 ncorrect nfalse
key A B C D A 5 0
ahmet A <NA> <NA> D A 3 1
canan A D <NA> D A 3 2
kemal D C B A A 1 5
meral A B C D D 4 2
ziya C C C D A 3 3
mine <NA> A C D <NA> 2 2
第一个是预期的,第二个是我得到的。
解决方案
假设您的数据存储在 中dat
,可以使用内置函数来实现所需的信息。首先,我假设数据存储在 中,dat
并且它是 a或. 我假设每个学生的名字都在第 1 列,正确答案在第一行。
为了执行计算,我们可以滥用我们可以将一个矩阵与另一个矩阵进行比较并获得一个逻辑矩阵作为输出。tibble
data.frame
data.table
M1 == M2
correct_test_answers <- dat[1, 2:6]
test_answers <- dat[-1, 2:6]
correct_answers <- rowSums(as.matrix(test_answers) == matrix(correct_test_answers,
ncol = 5,
nrow = nrow(test_answers)),
na.rm = TRUE)
not_answers <- rowSums(is.na(test_answers), na.rm = TRUE)
wrong_answers <- 5 - correct_answers - not_answers
dat[-1, c('correct', 'wrong', 'not_answers')] <- data.frame(correct_answers,
wrong_answers,
not_answers)
dat
V1 V2 V3 V4 V5 V6 correct wrong not_answers
1: key A B C D A NA NA NA
2: ahmet A <NA> <NA> D A 3 0 2
3: canan A D <NA> D A 1 3 1
4: kemal D C B A A 1 4 0
5: meral A B C D D 0 5 0
6: ziya C C C D A 0 5 0
7: mine <NA> A C D <NA> 2 1 2
推荐阅读
- javascript - 打字稿中的联合返回类型
- typescript - 使用打字稿处理未定义的返回
- javascript - 如何在分隔的输入字段上禁用 javascript 效果?
- aframe - AR.js,对象实体没有出现在 NFT 标记的顶部并且尺寸非常小
- encryption - 在 GNU 无线电中需要 AES 加密
- mysql - 如何在 mysql/mariadb 中查询具有相同 id 的多行
- java - 同一类的两个对象实例在不同的 JVM 进程中运行
- spring-batch - 在spring-batch中动态读取文件
- maven - 如何仅部署多模块 Maven 项目的一部分?
- python - 为什么我的网站的下半部分没有显示?