r - 如何从一系列字符串中提取元素和值并正确排列?
问题描述
我有一个这样的数据框,
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
想知道我的想法是否朝着正确的方向发展:
- 根据“,”将字符串拆分为单词。
- 根据“:”获取关键字“法语”、“数学”等。
- 分别用值填写右行和右列。并做了。
想请教关于第 3 步的建议,非常感谢。
解决方案
用换行符替换每个逗号和换行符,用冒号替换每个空格冒号。阅读使用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
是为了与问题保持一致,但它是一个字符向量,而不是数据框,因此您可能希望为它选择一个不同的名称。
推荐阅读
- javascript - 为什么要提醒(~5);输出 = -6?
- mysql - 将另一个表导入 MySQL 数据库中的列。收到错误“表已满”
- java - 如何从 json 文件中获取 json 对象
- python - 使用 python 使用 open-CV 查找对象的测量值
- c++ - 在C ++中将基类分配给派生类,反之亦然以及静态和动态对象之间的区别
- ios - 新版本的设备 ID 正在更改
- excel - 布尔逻辑在使用 vba 创建的数组公式中不起作用
- python - 迁移和两个应用程序在不同机器上共享部分数据库
- elasticsearch - 如何通过查询更新以从 elasticsearch 6.4 中的排序查询创建递增排名
- c# - 缺少值属性.net core mvc HiddenFor helper