【问题标题】:r: Error: Must extract column with a single valid subscriptr:错误:必须提取具有单个有效下标的列
【发布时间】:2021-11-27 22:48:30
【问题描述】:

我在数据框中有一列的值:“Q1”、“Q2”、“Q3”等。我正在尝试使用以下方法将字母“Q”与数值分开:

DF %>% separate(DF$tmp, c(NA, "Number"), "(?<=[A-Z])(?=[0-9])" ). 

我收到以下错误:

"错误:必须提取具有单个有效下标的列。x 下标 var 的大小为 452,但必须为 1。"

如果我使用以下方法手动创建数据框,则不会出现此错误:

df <- data.frame(x = c(NA, "Q1", "Q2", "Q10"))

df %>% separate(x, c(NA, "B"), "(?<=[A-Z])(?=[0-9])" )

但在使用现有数据框时确实出现错误(我检查过,is.dataframe 返回TRUE

【问题讨论】:

  • DF$tmpseparate 中是错误的

标签: r subscript


【解决方案1】:

你可以使用tidyr::extract -

tidyr::extract(df, x, c("A", "B"), '(Q)(\\d+)')

#     A    B
#1 <NA> <NA>
#2    Q    1
#3    Q    2
#4    Q   10

如果您只对数字部分感兴趣,还有很多其他选择。

#1.
tidyr::extract(df, x, "B", 'Q(\\d+)')
#2.
sub('Q(\\d+)', '\\1', df$x)
#3.
sub('Q', '', df$x)
#4.
stringr::str_extract(df$x, '\\d+')
#5.
readr::parse_number(df$x)

【讨论】:

    【解决方案2】:

    命令应该是

    DF %>% 
        separate(tmp, c("Other", "Number"), "(?<=[A-Z])(?=[0-9])" )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2018-12-06
      • 2014-04-19
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      相关资源
      最近更新 更多