使用 R dplyr 包根据其他列值操作列

奥兹图尔基布

我想为每个学生选择最好的 2 个测验考试结果(最高分和最高出勤率),并在 3 个测验考试中消除最弱的测验。我们可能会说我想从每行的 3 列中选择最好的 2 列。然后新建一个数据框有StudentID, ExamQuiz1, ExamQuiz2, ExamMidterm and ExamFinal我可以通过循环遍历表来处理它,这在 RI 假设中效率太低。处理 dplyr 包问题的有效方法是什么?

极简数据

伪数据框放置在底部。G”表示学生没有参加考试,所以我想保留该值而不是将其替换为 0。例如,如果他用 G ( ExamQuiz1), 0 ( ExamQuiz2), 10 ( ExamQuiz3)得到这个场景,我必须选择 0 作为ExamQuiz1和 10 作为ExamQuiz2测验输入。因为0比G因为出勤面好。如果有结果(带数字),则表示该学生已经参加。列下的每个单元格都ExamQuiz1, ExamQuiz2, ExamMidterm and ExamFinal可能有数字(考试结果)或字符值(“ G” > 未参加)。我不会触及 ExamMidterm 和 ExamFinal 列的任何值。主要思想只与ExamQuiz1, ExamQuiz2, and ExamQuiz3.

   StudentID  ExamQuiz1  ExamQuiz2  ExamQuiz3  ExamMidterm  ExamFinal
1      11111          0          G          G            G          G
2      22222          0          G         43           71         18
3      33333          0          G          G            G          G
4      44444          0          G          G            G          G
5      55555         60         38          G           64         27
6      66666          0          G          G            G          G

编辑:仍有一些评论者不断指出数据不整洁。正如我在评论中所解释的那样,这样做的原因或您提供的整理方法对我来说没有意义。出于这个原因,我在不改变数据结构的情况下对问题主体进行了更多解释。

蔡达伦

一个基本的 R 解决方案

cbind(df[-(2:4)], t(apply(df[2:4], 1, function(x){
  c(x[x == "G"], sort(x[x != "G"]))[-1]
})))

#   StudentID Midterm Final  1  2
# 1     11111       G     G  G  0
# 2     22222      71    18  0 43
# 3     33333       G     G  G  0
# 4     44444       G     G  G  0
# 5     55555      64    27 38 60
# 6     66666       G     G  G  0

在你的规则中,G应该放在任何数字前面。所以一开始我把所有存在的东西放在G一个向量的开头并附加排序的分数。删除向量中的第一个元素后,将保留前 2 个分数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据是否在其他行中重复,在R中使用dplyr添加一列

根据 R 中数据框中所有其他列中的字符串值,使用 dplyr 创建一个新列

R dplyr:使用dplyr将列集添加到其他列集

使用R / dplyr过滤列?

使用dplyr根据其他数据框添加新列

根据各种其他列值中的值创建新列 - 使用 R

在R中根据值以及另一列的频率使用dplyr创建列

R 使用 Dplyr 根據其他 5 列的值創建包含 6 個可能值中的 1 個的列

如何使用R根据其他列的值创建新列

使用dplyr基于列值对R中的值求和

使用dplyr mutuate(或其他程序包)基于每行中特定值的计数来创建新列

在R中使用dplyr划分多列

在R中使用dplyr乘以成对的列

在 R 中使用 `dplyr` 识别列排名

R:使用dplyr突变多个列

R使用dplyr根据一列中的最大值对数据框进行变异

R - 使用 dplyr 计算值在列中出现的次数

使用dplyr汇总R:2个不同列中的值

使用dplyr r更改列中的值时提取行

如何使用dplyr以R中其他两个列的出现为条件创建一个新列?

使用dplyr基于R中的其他两个列自定义对新列进行变异

过滤列以仅显示有值时,并删除R中的其他值(R,dplyr,lubridate)

使用mutate_if(R dplyr软件包)还是其他函数?

使用R根据其他列创建新变量

使用dplyr查找列中的最大值,并从其他列返回元素

基于dplyr的R中其他列的条件均值

如何使用 dplyr 根据 R 中的另一个数据框匹配列的值?

如何根据 R 中的另一个数据框匹配列的值并使用 dplyr 打印消息?

使用dplyr根据多列中的行值选择列