【问题标题】:Grep unnamed column for row indicesGrep 行索引的未命名列
【发布时间】:2019-11-21 16:44:10
【问题描述】:

我们会收到一份 Excel 格式的月度报告,我只需要特定的值。以前,我可以使用 readxl grep 行号所需的列,然后从那里开始:

library(readxl)
file <- read_excel(readxl_example("deaths.xlsx"), col_names = FALSE)) 
row_pos <- grep(pattern = "actor", file$..2) 

然后我可以为我想要的特定列添加更多内容:

col_pos <- grep(pattern = "Has Kids", file)

这用于返回我想要的行位置,我可以提取并继续处理我的数据。

我在这里故意使用 now 不正确的$..2 语法。最近的更新将此约定更改为$...2

我的问题是如何为第一个 grep 实现更强大的选择,以便在实现 readxl(或任何其他包)中的微小语法更改时不必更新所有代码?

我试过了:

row_pos <- grep(pattern = "actor", x = file %>% select(contains("2")))

但这只会返回第一个值。

这是有关数据发生了什么的一些上下文的其余管道。

values <- as.data.frame(t(file[row_pos, col_pos]), stringsAsFactors = FALSE, row.names = NULL)

等等。 谢谢!

【问题讨论】:

  • 函数names(file)可用于检索列名。然后像file[[grep("2", names(file))]] 这样的东西会选择正确的列。

标签: r readxl


【解决方案1】:

一位同事建议使用 dplyr::pull,它将值作为向量提取出来。这对于非结构化数据很有用,在这些数据中,您需要四处寻找所需的值,然后将它们重新整理成正确的格式。

row_pos <- grep(pattern = "actor", pull(data[,2])) 

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2018-02-10
    • 2021-12-16
    • 1970-01-01
    • 2017-06-06
    • 2016-08-28
    • 2015-04-29
    相关资源
    最近更新 更多