【问题标题】:Parse a column that contains both column names and values for those columns解析包含这些列的列名和值的列
【发布时间】:2019-09-01 15:42:53
【问题描述】:

假设我的数据框 df$characteristics 中有以下列,其格式如下:

sex,male,country,GER,age,25,date_of_birth,1994-04-04

sex,female,age,23,date_of_birth,1996-04-04

country,GBR,age,45,date_of_birth,1974-04-04

country,RUS,date_of_birth,1978-10-04

本质上,每个奇数词都是列名,每个偶数词都是该列的值。我想做的是创建 4 个不同的列:性别、国家、年龄和出生日期,并在可能的情况下用各自的值填充这些列(某些值将为空)。我如何在 R 中做到这一点?

【问题讨论】:

    标签: r parsing rstudio


    【解决方案1】:

    使用characteristics 在末尾的注释中重复显示,用冒号字符串换行符替换逗号字符串逗号或逗号字符串结尾。数据现在是 dcf 格式,所以使用read.dcf 来读取它。请注意,我们将输入的每个空元素替换为Z,0,因为 dcf 格式至少需要一个元素。最后,我们删除了Z 列。

    dcf <- gsub(",(.*?)(,|$)", ":\\1\n", 
      replace(characteristics, characteristics == "", "Z,0"))
    m <- read.dcf(textConnection(dcf))
    m <- m[, colnames(m) != "Z"]
    m
    

    给出这个字符矩阵:

         sex      country age  date_of_birth
    [1,] "male"   "GER"   "25" "1994-04-04" 
    [2,] "female" NA      "23" "1996-04-04" 
    [3,] NA       "GBR"   "45" "1974-04-04" 
    [4,] NA       NA      NA   NA           
    [5,] NA       "RUS"   NA   "1978-10-04" 
    

    注意

    请注意,我们添加了一个空行来说明已处理。

    characteristics <- c("sex,male,country,GER,age,25,date_of_birth,1994-04-04", 
        "sex,female,age,23,date_of_birth,1996-04-04", 
        "country,GBR,age,45,date_of_birth,1974-04-04", 
        "",
        "country,RUS,date_of_birth,1978-10-04")
    

    【讨论】:

    • 嘿,非常感谢!我对这个解决方案有一些问题:列特征是更大数据框的一部分(还有 18 个其他列),而且该列“特征”中有一些空行。有没有办法解决这些缺点?
    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多