首页 > 解决方案 > 如何从一系列字符串中提取元素和值并正确排列?

问题描述

我有一个这样的数据框,

DF1= c(
  "Name : John Miller, Math : 100, History : 80, Physics: 90",
  "Name : Mary Smith, French : 99, History : 90, Physics: 89",
  "Name : Eddy Abbot, Math : 90, French : 85, Chemistry : 90"
)

想以这种方式使其成为data.table(data.table格式更好)

          Name   Math   French History   Physics    Chemistry
1: John Miller    100       NA      80        90           NA
2:  Mary Smith     NA       99      90        89           NA
3:  Eddy Abbot     90       85      NA        NA           90

想知道我的想法是否朝着正确的方向发展:

  1. 根据“,”将字符串拆分为单词。
  2. 根据“:”获取关键字“法语”、“数学”等。
  3. 分别用值填写右行和右列。并做了。

想请教关于第 3 步的建议,非常感谢。

标签: rdata.table

解决方案


用换行符替换每个逗号和换行符,用冒号替换每个空格冒号。阅读使用readLines将字符串分成单独的行并使用trimws删除任何垃圾空格。此时文件为 Debian 控制格式 (DCF),因此我们可以使用read.dcf创建字符矩阵来读取它m。现在转换m为 data.table 并转换类型。

dcf <- trimws(readLines(textConnection(gsub(" :", ":", gsub(",|$", "\n", DF1)))))
m <- read.dcf(textConnection(dcf))
DT <- as.data.table(m)[, lapply(.SD, type.convert, as.is = TRUE)]

给予:

> DT
          Name Math History Physics French Chemistry
1: John Miller  100      80      90     NA        NA
2:  Mary Smith   NA      90      89     99        NA
3:  Eddy Abbot   90      NA      NA     85        90

笔记

我们使用对象名称DF1是为了与问题保持一致,但它是一个字符向量,而不是数据框,因此您可能希望为它选择一个不同的名称。


推荐阅读