【问题标题】:Split string column into multiple new columns in R将字符串列拆分为R中的多个新列
【发布时间】:2021-03-07 16:05:04
【问题描述】:

我有一列数据如下所示:

data.frame(Weather=c("Breezy Temp: 68° F, Humidity: 66%, Wind: W 15 mph","N/A Temp: ° F, Wind:   mph")

我想提取所有数字(从字符串中提取数字),但我想将它们保存在单独的列中。

理想的结果如下:

Row 1: 68 66 15 Row 2: NA NA NA (Blanks will do, too)

到目前为止,我已经能够做到这一点:

(str_extract_all(Data$Column,"\\(?[0-9,.]+\\)?"))

但我只是得到一个看起来像这样的列表;

[[1]] [1] "68" "," "," "," "66" "," "," "," "15"

[[2]] [1] ","

而不是将其分成每行 3 列。

谢谢!

【问题讨论】:

    标签: r regex string list


    【解决方案1】:

    这是base R 的选项。我们在“天气”列的gsub 中用, 替换一个或多个非数字(\\D+),然后用read.csv 读取以创建多列,并用Filter 读取所有包含NA 的列元素

    Filter(function(x) any(!is.na(x)), 
      read.csv(text = gsub("\\D+", ",", df1$Weather), 
             fill = TRUE, header = FALSE))
    

    -输出

    #  V2 V3 V4
    #1 68 66 15
    #2 NA NA NA
    

    使用新数据

    Filter(function(x) any(!is.na(x)), 
       read.csv(text = gsub("\\D+", ",", df2$Weather), 
              fill = TRUE, header = FALSE))
    #  V2 V3 V4 V5
    #1 68 66 15 NA
    #2 NA NA NA NA
    #3 76 68  6 10
    

    数据

    df1 <- structure(list(Weather = c("Breezy Temp: 68° F, Humidity: 66%, Wind: W 15 mph", 
    "N/A Temp: ° F, Wind:   mph")), class = "data.frame", row.names = c(NA, 
    -2L))
    
    df2 <- structure(list(Weather = c("Breezy Temp: 68° F, Humidity: 66%, Wind: W 15 mph", 
    "N/A Temp: ° F, Wind:   mph", "Cloudy Temp: 76° F, Humidity: 68%, Wind: SW 6 mph, Gusts to 10 mph"
     )), row.names = c(NA, -3L), class = "data.frame")
    

    【讨论】:

    • 这很好,但不幸的是,当我自己应用它时,我的解决方案数据框只有两列宽,而不是 3 列。 (并且数据框的长度比原列的长度长)
    • @ArianModarres 请检查您数据中的模式。我用gsub 删除了所有不是数字的东西,并为此插入了,。然后,我用read.csv 阅读。如果您可以显示更多数据,那么我可以测试
    • 我正在查看该数据列中是否有任何异常,但似乎每一行的格式都与我在示例中提供的格式相同。然而,数据集很大,所以我可能无法查看一行是否是不同的格式。你能想到是什么导致我们的输出出现差异吗?也许添加第三行:“N/A(室内)温度:° F,风:英里/小时”
    • 我发现了问题。请将此行添加到数据中:“多云温度:76° F,湿度:68%,风:西南 6 英里/小时,阵风至 10 英里/小时”。我想可以为每一行添加第 4 列,这应该可以缓解这个问题。
    • 感谢您的帮助,这是一个相当优雅的解决方案!
    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多