r - 同时拆分两列并使用 data.table 制作长格式数据
问题描述
鉴于以下数据
d.df <- read.table(header=T, text="V1 | V2 | V3
A + C | Cat + Dog | Type 1
B + D | Bird | Type 1
A + D | Cat + Fish | Type 2" ,stringsAsFactors=F, sep="|", strip.white = TRUE)
require(data.table)
setDT(d.df)
我想使这些数据以长格式同时拆分两个变量,所以所需的输出是这样的
A Cat Type 1
C Dog Type 1
B Bird Type 1
D Bird Type 1
A Cat Type 2
D Fish Type 2
这样我可以基于一个变量进行拆分
output <- d.df[, list(V2 = unlist(str_split(V2, " \\+ "))), by = V1]
但是如果我一起尝试,我会得到一个错误recycled with remainder.
解决方案
我们可以cSplit
使用splitstackshape
splitstackshape::cSplit(d.df, c("V1", "V2"), sep = "+", direction = "long")
# V1 V2 V3
#1: A Cat Type 1
#2: C Dog Type 1
#3: B Bird Type 1
#4: D Fish Type 1
#5: A Cat Type 2
#6: D Fish Type 2
separate_rows
fromtidyr
在这种情况下也适用
tidyr::separate_rows(d.df, V1, V2, sep = "\\s+\\+\\s+")
推荐阅读
- c - 在 C 中打印一个计数仅打印到 65
- django - vue-pagination-2 在 vuejs 中的分页数据
- laravel - 如何在 bitbucket 和 laravel 中添加 Pre-commit 钩子
- android - 文本到语音应用程序无法在 android studio 的模拟器中运行,但可以在 android 设备中运行
- java - 如何交换链表中的相邻节点
- syntax - Logstash 找不到匹配语句的错误
- eclipse - 将 Graphviz 文件从 Eclipse 导出为 .png
- curl - 在windows上执行curl命令
- git - Github Wiki 问题 - 我想将远程存储库的 wiki.git 推送到我的 github 存储库,但它不起作用
- android - 仅在部分 Activity 或 Fragment 中使用 View Binding,而不是在整个 App 中使用