【问题标题】:R, list the subject(s) where a studient is "B" or "C"R,列出学生为“B”或“C”的科目
【发布时间】:2019-04-24 22:06:15
【问题描述】:

我从 R 开始。我正在使用一个名为“students”的数据集进行测试。它是一个矩阵,其中包含学生姓名及其在多个科目 (Vars) 上的分类 (A、B、C)。当主题的值为“B”或“C”时,我想过滤名称并列出主题。请看看我有什么以及我想得到什么。

感谢您的帮助

我有什么...

Name    MATH    LANG    GYMN    LIT SOC
Nigel   A   B   C   A   C
John    C   C   A   B   C
Martha  A   A   A   A   A

我希望...

Nigel   
LANG 
GYMN
SOC

John
MATH
LANG
LIT
SOC

【问题讨论】:

  • 嗨,欢迎来到 SO!一般来说,很难回答提供数据截图的问题,因为我们不知道数据在 R 会话中的实际组织方式。看看how to make a reproducible example in R。在这种情况下,我们不知道您的学生矩阵实际上是矩阵还是数据框,也不知道您想要的是列表、字符向量还是数据框。

标签: r list filter


【解决方案1】:

使用以下数据,

data <- data.frame(row.names = c("Nigel", "John", "Martha"),
               MATH = c("A", "C", "A"),
               LANG = c("B", "C", "A"),
               GYMN = c("C", "A", "A"),
               LIT = c("A", "B", "A"),
               SOC = c("C", "C", "A"))

我们可以将我们的测试应用到每一行数据上,(有更有效的方法,但是这个很有指导意义),

rst <- apply(data, 1, function(x) which(x == "B" | x == "C"))

$Nigel
LANG GYMN  SOC 
   2    3    5 

$John
MATH LANG  LIT  SOC 
   1    2    4    5 

$Martha
named integer(0)

这会返回一个包含相关科目的列表,例如使用rst$Nigel获取相关学生信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 2020-05-08
    • 2023-04-09
    相关资源
    最近更新 更多