代码之家  ›  专栏  ›  技术社区  ›  Chris

substr()将向量作为字符串,而不是将向量的值作为字符串

  •  0
  • Chris  · 技术社区  · 6 年前

    我有一个像这样的字符向量:

    Variables <- c("EA10", "EA14", "EA15", "EA16", "EA19", "EA2", "EA21", "EA22", "EA24", "EA25", "EA28")
    

    Variables 是一个向量 df .我想从上面向量的第三个字符中提取(特别是提取数字),我使用的代码是:

    df3["#Variable"] <- substr(df3["Variables"], start=2,stop=100)
    

    然而,正如你在新的 #Variable 向量,它把向量作为一个字符串,而不是向量的值作为字符串:为什么?我怎么解决这个问题?

       Variables       #Variable
    2       EA10   c("EA10", "EA14", "EA15",
    5       EA14   c("EA10", "EA14", "EA15",
    6       EA15   c("EA10", "EA14", "EA15",
    7       EA16   c("EA10", "EA14", "EA15",
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Joseph Clark McIntyre    6 年前

    当你提到 df['Variables'] ,您提取的是一个数据帧,而不是向量,SUBSTR不知道如何处理它。使用df$variables或df[‘variables']],如下所示。

    df <- data.frame(Variables = c("EA10", "EA14", "EA15", "EA16", "EA19", "EA2", "EA21", "EA22", "EA24", "EA25", "EA28"))
    substr(df[["Variables"]], start = 2, stop = 100)
    [1] "A10" "A14" "A15" "A16" "A19" "A2"  "A21" "A22" "A24" "A25" "A28"
    
        2
  •  1
  •   RLave    6 年前

    我想从上面向量中的第三个字符中提取 (具体来说,提取数字)

    我会用 gsub() 找到一个特定的模式并替换它。

    Variables <- c("EA10", "EA14", "EA15")
    gsub(pattern="\\D", replacement="", Variables)
    #[1] "10" "14" "15"
    
    • pattern="\\D" 匹配所有不是数字的项目(更多 here )

    • replacement="" 将其替换为空白空间


    作为替代方案,您当然可以直接提取数字,例如 str_extract() stringr 包裹:

    stringr::str_extract(string = Variables, pattern = "\\d+") 
    # \\d+ matches multiple digits in the string
    #[1] "10" "14" "15"
    

    里面 data.frame :

    df["Variable"] = gsub(pattern="\\D", replacement="", df["Variable"])
    

    或:

    df["Variable"] = stringr::str_extract(df["Variable"], pattern="\\d+")