r - 为字符列 R 中的每个值向数据框中添加行
问题描述
我最好用一个例子来解释我的问题:
Role Skill ID
1: A a 1, 1/a, 1/b
2: A b 1/a, 2/a
3: B c 1/a, 2/c
4: B d 3
5: C e 4
有了上面的数据 dt,我想为 ID 变量的每个值创建额外的行。最终结果应该是:
Role Skill ID
1: A a 1
2: A a 1/a
3: A a 1/b
4: A b 1/a
5: A b 2/a
6: B c 1/a
7: B c 2/c
8: B d 3
9: C e 4
下面是复制数据的代码:
dt <- data.table(Role = c("A","A","B","B","C"),
Skill = c("a","b",'c',"d","e"),
ID = c(c("1, 1/a, 1/b"),c("1/a, 2/a"),c("1/a, 2/c"),
c("3"),c("4")))
解决方案
我们可以用separate_rows
library(dplyr)
library(tidyr)
dt %>%
separate_rows(ID, sep=",\\s*")
# Role Skill ID
#1: A a 1
#2: A a 1/a
#3: A a 1/b
#4: A b 1/a
#5: A b 2/a
#6: B c 1/a
#7: B c 2/c
#8: B d 3
#9: C e 4
或与strsplit
dt[, .(ID = unlist(strsplit(ID, ",\\s*"))), .(Role, Skill)]
推荐阅读
- sapui5 - setVisible 不适用于 SAP UI5 中的列表控件
- c# - Nuke 和更新 nuspec 文件
- php - 如何从检索数据库值中设置cookie并将其发送到php中的另一个页面
- sql-server - SQL Server:限制数据范围
- java - 有没有办法在 Java 正则表达式中包含 DOT 但不包含双整数?
- java - Firebase:无法将 java.lang.String 类型的对象转换为 com.example.g.Model.Cart 类型
- javascript - 使用快速把手为简单的节点 webapp 传递数据
- multithreading - LabVIEW如何处理多处理和多线程?
- python - 张量输出keras上的处理
- sql - SQL WHERE 子句性能问题 AX2012R3