【发布时间】:2016-09-05 20:17:24
【问题描述】:
这是学校的问题,但我已经研究了几个小时,只需要指出正确的方向。我不是要完整的答案。
我收到了一个数据框,其中包含学生在各种评估中的成绩。我必须编写一个函数来生成以给定前缀开头或完全匹配名称的列数。
我得到了以下框架:
assessmentCount <- function(df, assessmentNamePrefix)
{
}
当执行以下代码行时,我需要能够编写代码以获得下面的确切结果:
assessmentCount(df,"hw")
# [1] 7
和
assessmentCount(df,"exam1")
# [1] 1
我发现以下代码在独立于框架运行并写入 [hw] 时,给出了正确的数字 7:
my_columns <- df[, grep("^[hw]", names(df), value=TRUE)]
ncol(my_columns)
但是,当我对 [exam1] 执行相同操作时,我得到的数字 3 不正确,因为它包含exam1、exam2 和exam3 的列:
my_columns <- df[, grep("^[exam1]", names(df), value=TRUE)]
ncol(my_columns)
更糟糕的是,当我将代码放入框架并用变量assessmentNamePrefix 替换值时,两个测试的值都是错误的8。
assessmentCount <- function(df, assessmentNamePrefix)
{
my_columns <- df[, grep("^[assessmentNamePrefix]", names(df), value=TRUE)]
ncol(my_columns)
}
此时我非常沮丧,不明白出了什么问题。我确实意识到这是一个非常基本的问题,但我正处于一个非常基本的 R 编程课程的开始阶段。有人可以指出我正确的方向吗?将不胜感激。谢谢你:)
【问题讨论】:
-
你需要学习一些正则表达式。当您使用
[exam1]时,这将匹配方括号之间的任何字母。你可以改用grep("^exam1", c("exam1", "exam2", "exam3"))。正如上面评论中提到的 - 只需在grepl上使用sum。 -
谢谢你们。我不知道为什么我一直跳过简单的代码并认为它必须更难。我一直想把所有东西都分解成小块,然后分析这些小块。当然,步骤越多,错误就越多。我会重新阅读 re: 正则表达式。谢谢:)
-
@DavidArenburg 谢谢,我会看看的。
-
那很不幸。
标签: r dataframe count multiple-columns prefix