【发布时间】:2021-07-16 18:34:55
【问题描述】:
我有一个已导入 R 的 excel 文件。问题是有超过 100,000 行的数据在单个单元格中如下所示:
{'gender': 'Male', 'nationality': 'IRL', 'document_type': 'passport', 'date_of_expiry': '2019-08-12', 'issueing_country': 'IRL'}
所以发生的情况是,R 也将整个信息放入了我表中的一个框中。我希望 R 将这一列分成多个列,例如“性别”、“国籍”、“文档类型”等。每个列都有自己的列,分别包含“男性”、“IRL”、“护照”等条目排。问题是在其他单元格中遗漏了一些信息,例如另一个单元格可能如下所示:
{'gender': 'Female', 'document_type': 'driving_licence', 'date_of_expiry': '2023-02-28', 'issueing_country': 'GBR'}
还有一个这样的:
{'document_type': 'driving_licence', 'date_of_expiry': '2044-12-14', 'issuing_country': 'GRC'}
如何将这些条目分配给它们自己的列,并且在未提供任何信息的情况下具有空值。我是初学者 R 用户。我曾尝试使用包“qdapRegex”,因为他们有一个方便的工具,我可以在其中提取其他两个字符/字符串之间的字符,但无济于事。我想如果我能弄清楚如何应用像'|'这样的运算符到字符串我可以用我的方式做到这一点。
输入后:
input <- read.csv(text=r"(
ID, Properties
1,"{'gender': 'Male', 'nationality': 'IRL', 'document_type': 'passport', 'date_of_expiry': '2019-08-12', 'issuing_country': 'IRL'}"
2,"{'document_type': 'national_identity_card', 'date_of_expiry': '2027-01-23', 'issuing_country': 'CYP'}"
3,"{'date_of_expiry': '2019-01-28', 'issuing_country': 'JEY'}"
4,"{'document_type': 'driving_licence', 'date_of_expiry': '2006-06-14', 'issuing_country': 'POL'})")
期望的输出:
output <- read.csv(text="
ID,gender,nationality,document_type,date_of_expiry,issuing_country
1,Male,IRL,passport,2019-08-12,IRL
2,,,national_identity_card,2027-01-23,CYP
3,,,,2019-01-28,JEY
4,,,driving_licence,2006-06-14,POL
")
【问题讨论】:
-
看起来你有一列 JSON 数据。 R 中有 JSON 解析器可以提供帮助。如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
-
@MrFlick 我做了一些修改,可以吗?
-
那好多了,我把数据变成了合适的 R 对象。所有这些管道和破折号仍然难以复制/粘贴到 R 中进行测试。我们正在努力避免为了测试代码而不得不重新输入一堆东西。
-
啊,我明白了,谢谢您的修改。
标签: r