【问题标题】:Filtering data frame in R : Combining GREP with variable names?在 R 中过滤数据框:将 GREP 与变量名结合使用?
【发布时间】:2019-04-29 18:54:32
【问题描述】:

我希望根据两个标准过滤数据框:1. 几个关键变量,2. 其他几个具有特定模式的变量。

通常我使用以下代码:

mydata <- rawData[,c("scenario","period","farmID",grep("planting_*",names(rawData), value = TRUE))]

问题是在我将 R 更新到新版本 (3.5.3) 后发生的。在它运行良好之前,我得到了我想要的:一个由变量过滤的新数据框。

然而,现在 R 只返回一个带有变量名的向量(没有观察)。

谁能帮我解决这个问题?

非常感谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    此代码从未奏效:您不能在同一个子集向量中混合名称和数字索引。

    此外,您的正则表达式是错误的:* 应该是 .* - 否则您将搜索单词 planting 后跟零个或多个下划线。在您的情况下,这不会产生影响,但它是一种不同的表达方式,因此会误导您代码的读者。

    但是,您可以通过使 grep 返回匹配的名称而不是索引来使其工作:

    planting_names <- grep("planting_.*", names(rawData), value = TRUE)
    mydata <- rawData[ , c("scenario", "period", "farmID", planting_names)]
    

    【讨论】:

    • 您好康拉德,非常感谢您的回复。是的,它确实适用于以前的 R 版本,我在我的屏幕上使用 R 3.3.1 有它,它符合我的预期。但是在另一台装有新版本的计算机上却没有...感谢您的建议,我在这里尝试过,但它也不起作用,它返回的向量与我发布的命令相同。
    • @MarceloCarauta 我确信代码工作。它可能会在您的旧安装中产生输出,但该输出是错误的。仔细检查,你会发现你的 grep 表达式要么什么都不返回,要么你的 data.frame 恰好包含以数字作为名称的列。 那些列将被删除,而不是您想通过正则表达式选择的列。
    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2021-08-17
    相关资源
    最近更新 更多