r - 数据整理帮助:用所有数据拆分一列
问题描述
我需要一些数据整理方面的帮助。我在 Facebook Messenger 上下载了与某人的对话,但它的输出如下:
V1.
Person A
Coolcool
2018-06-25 19:34
Person B
See you later
:D
2018-06-25 19:34
Person A
You called Person B
Duration: 30 seconds
2018-06-25 19:19
Person B.
What's up?
2018-06-25 19:09
Person A
Hey!
2018-06-25 19:09
它们都在一个列中,但我正在尝试制作一个数据框,其中说话者在一个列中,消息在另一个列中,日期将在另一个列中。我面临的问题是,有时消息分两行,所以我不能将整列分成三列。什么是最好的解决方案?感谢任何帮助:)
解决方案
由于您的条目始终是“人 A”(或人 B)并以日期结尾,格式为 YYYY-MM-DD HH:MM,我会使用这样的正则表达式:
library(stringr)
date_match="\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}"
col_a=str_match_all(chat_messenger,
paste0("(?<=\n|^)Person A\\s*\n([\\s\\S]*?)\n",date_match, sep="")
)[[1]][,2]
col_b=str_match_all(chat_messenger,
paste0("(?<=\n)Person B\\s*\n([\\s\\S]*?)\n",date_match, sep="")
)[[1]][,2]
col_a
col_b
结果如下:
> col_a
[1] "Coolcool " "You called Person B \nDuration: 30 seconds "
[3] "Hey! "
> col_b
[1] "See you later \n:D " ". \nWhat's up? "
为了更好地理解正则表达式匹配:我将这一行分开: (?<=\n|^)Person A\s*\n([\s\S]*?)\n
(?<=\n|^)
正在查找前面有一个空格或文档开头的内容,以防您在聊天中使用“人员 A”一词。Person A\\s*\n
: 查找后跟空格(至少为 0)和换行符的名称([\\s\\S]*?)
: 提取包括换行符在内的所有内容\n
:在换行之前停止提取
推荐阅读
- docker - Jenkins ansible docker_image push to docker registry 错误
- php - Laravel 调度自定义设置
- php - 带有表单上传自定义错误消息的 Ajax 文件上传
- html - 如何在 VB.NET 的 HTML 标记中查找和替换数据(来自 DB)?
- uwp - 如何在 idl 3.0 中声明嵌套模板
- exceljs - ExcelJs:调用 Office.context.document.getFileAsync 后工作簿自动关闭
- mysql - Mysql where子句查询json列中的对象数据数组
- javascript - 如何在渲染表情符号时渲染♀️、♂️这些符号?
- hadoop - 无法为输出方法“xml”加载属性文件“output_xml.properties”(检查 CLASSPATH)
- javascript - 更改常量值时,TypeError(但没有其他)背后的逻辑是什么?