【问题标题】:String split into duplicate rows [duplicate]字符串分成重复的行[重复]
【发布时间】:2013-09-30 20:14:41
【问题描述】:

给定以下示例数据集:

col1 <- c("X1","X2","X3|X4|X5","X6|X7")
col2 <- c("5","8","1","4")
dat <- data.frame(col1,col2)

如何将col1 拆分为| 并将它们作为具有重复col2 值的单独行输入?这是我想最终得到的数据框:

col1 col2
  X1    5
  X2    8
  X3    1
  X4    1
  X5    1
  X6    4
  X7    4

我需要一个可以容纳多个类似于col2 的列的解决方案,这些列也需要复制。

【问题讨论】:

  • 欢迎来到stackoverflow!由于您是 SO 新手,请花一些时间阅读 about Stackoverflowhow to ask。很高兴您提供了minimal, reproducible data set。但是,向我们展示您的尝试也很重要。我敢肯定,如果您分享您尝试过的代码并解释哪里出了问题,那么很多人(例如我)会更愿意提供帮助。谢谢!
  • 你可以试试我的“splitstackshape”包中的concat.split.multiplelibrary(splitstackshape); concat.split.multiple(dat, "col1", "|", "long")

标签: r


【解决方案1】:

只需拆分字符串,然后根据长度重复其他列。

y<-strsplit(as.character( dat[,1])  , "|", fixed=TRUE)
data.frame(col1= unlist(y), col2= rep(dat[,2], sapply(y, length)))
  col1 col2
1   X1    5
2   X2    8
3   X3    1
4   X4    1
5   X5    1
6   X6    4
7   X7    4

如果您需要重复除第一列之外的许多列

data.frame(col1= unlist(y), dat[ rep(1:nrow(dat), sapply(y, length)) , -1 ] )

【讨论】:

  • 我现在会使用tidyr,试试separate_rows(dat, col1, sep="\\|")
猜你喜欢
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2017-10-14
  • 2010-11-03
  • 1970-01-01
  • 2016-07-31
  • 2014-09-23
相关资源
最近更新 更多