【问题标题】:Grep a 1 or 2 character number from a variable in R从 R 中的变量中提取 1 或 2 个字符的数字
【发布时间】:2020-08-09 20:57:12
【问题描述】:

我有两张桌子,GrowTempGrow 详细说明了我关注的每个区域的生长季节和非生长季节(这些是静态的),而 Temp 详细说明了这些相同区域的不同年份的每个月的平均温度(这些是列)。我试图确定生长季节和非生长季节的每年平均温度,但我遇到了如何选择列的问题 - 我正在使用grep,但不知道如何计算两位数的月份!

此时,我已经隔离了年份的每一列,并有一个一年的列名向量 - 类似于 "tmp_2001_1" "tmp_2001_2" "tmp_2001_3" ... "tmp_2001_11" "tmp_2001_12"。我还在一对变量中存储了生长季节的开始和结束,它们存储为代表月份的整数:start <- some number between 1 and 12end <- some number between 1 and 12。但是当startend 有2 位数字时,我不知道如何让grep 识别生长季节。这就是我所拥有的适用于它们都是 1 位数字的情况:

grow_months <- grep(paste('tmp_','2001','_','[',start,'-',end,']',sep = ''), vector_of_column_names)

如果startend 是两位数,我该如何扩展它?

【问题讨论】:

  • 不要试图在一行中完成所有这些。使用一行提取月份编号(您可以使用gsubstringr::str_extract)并转换为数字,然后使用第二行与您的开始和结束进行比较。
  • 我会试试的!用两行来做更有意义。 @js86,我如何使用它来识别具有不同起点和终点的范围?

标签: r


【解决方案1】:

正如格雷戈尔所说,

strings = paste0("tmp_2001_",c(1:20,100))
start = 9
end = 12
ii = sapply(strsplit(strings,'_'), function(x)x[3]%in%start:end)
strings[ii]

或者使用简单的正则表达式,您可以尝试

ii = grep(paste(paste0('_(',start:end,')$'),collapse='|'), strings)
strings[ii]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2013-01-14
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多