【问题标题】:Retrieving only values from a column in R [closed]仅从 R 中的列中检索值 [关闭]
【发布时间】:2018-01-29 06:50:42
【问题描述】:

您好,我有如下列的数据集,我只需要值。请建议如何去做

输入:

Col1

45.90625 %RH
491.25 ppm
523.5 ppm
0 % open
58.59375 cfm
50 deg F
24.3125 % open
0 % open
55.59375 deg F
0 % open
70 deg F

输出:

 Col1

45.90625
491.25 
523.5 
0 
58.59375 
50 
24.3125 
0 
55.59375 
0 
70 

【问题讨论】:

  • sapply(strsplit(df$Col1, " "), '[[', 1) ?
  • 如果您希望将结果视为数字,请不要忘记 as.numeric() 结果。
  • 谢谢,上面的代码正在运行。但是,如果我尝试转换为数字,它会引发警告,并且实际上不会转换为数字警告消息:强制引入的 NAs
  • 使用sub(" .*", "", df$Col1)
  • 不,仍然在生产 NAs

标签: r regex dataframe


【解决方案1】:

试试这个正则表达式:

^\d*(?:\.\d+)?

Click for Demo

说明:

  • ^ - 断言字符串的开头
  • \d* - 匹配 0+ 个数字
  • (?:\.\d+)? - 匹配 . 后跟 1+ 位数字。 ? 最后使这个子序列可选

【讨论】:

    【解决方案2】:

    您可以捕获第一次出现,然后将值替换为:

    col1 <- c('45.90625 %RH', '491.25 ppm', '523.5 ppm', '0 % open', '58.59375 cfm', '50 deg F', '24.3125 % open', 
              '0 % open', '55.59375 deg F', '0 % open', '70 deg F')
    
    gsub(".*?\\b(\\d+(?:\\.\\d+)?)\\b.*", "\\1", col1)
    

    这会产生

    [1] "45.90625" "491.25"   "523.5"    "0"        "58.59375" "50"       "24.3125"  "0"        "55.59375" "0"       
    [11] "70"    
    

    作为数字:

    col1 <- c('45.90625 %RH', '491.25 ppm', '523.5 ppm', '0 % open', '58.59375 cfm', '50 deg F', '24.3125 % open', 
              '0 % open', '55.59375 deg F', '0 % open', '70 deg F')
    
    (col2 <- as.numeric(gsub(".*?\\b(\\d+(?:\\.\\d+)?)\\b.*", "\\1", col1)))
    

    【讨论】:

    • 它可以工作,但是当我尝试转换为数字时,它会产生 NAs
    • @Anagha:更新了答案。您可能对这里的因素有疑问(您是如何构建数据框的?)。
    • 是的,我发现列中的值是字符,例如。 “Alarm”、“Occupied”等。因此,当应用“as.numeric”时,这些将被转换为 NAs
    猜你喜欢
    • 2012-12-11
    • 2011-09-27
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多