【问题标题】:Splitting String while copying information复制信息时拆分字符串
【发布时间】:2014-11-04 21:43:11
【问题描述】:

我的数据如下所示:

我想拆分代码字符串,使其在代码列中只有一个字符,每个字符都有新行,但它周围的列是相同的。第一个就是这样。

这可能吗?谢谢!

【问题讨论】:

  • 您可以将code 变量拆分为添加到数据框中的单个字符变量,然后使用reshapereshape2 函数之一来“融化”您的行。或者,您可以创建一个循环,在其中迭代 code 字符串,并为每个字符,将一行附加到具有您希望保留的任何变量的不同数据帧。
  • 不要发布数据图片。没用的。发布实际数据或子集,例如,使用dput(head(mydata))

标签: r string split delimiter


【解决方案1】:

我会推荐我的“splitstackshape”包中的cSplit 函数:

library(splitstackshape)
cSplit(df, "code", sep = "", direction = "long", stripWhite = FALSE)
#     event_id code staff_id
#  1:   124456    .     2222
#  2:   124456    C     2222
#  3:   124456    C     2222
#  4:   124456    D     2222
#  5:   124456    S     2222
#  6:   124456    S     2222
#  7:   123849    .     2222
#  8:   123849    S     2222
#  9:   123849    S     2222
# 10:   123849    B     2222
# 11:   123849    B     2222
# 12:   123849    S     2222
# 13:   234829    .     2343
# 14:   234829    S     2343
# 15:   234829    S     2343
# 16:   234829    B     2343
# 17:   234829    B     2343

这假设我们从以下数据开始:

df <- data.frame(event_id = c(124456, 123849, 234829),
                 code = c(".CCDSS", ".SSBBS", ".SSBB"),
                 staff_id = c(2222, 2222, 2343))

【讨论】:

  • 现在你知道我为什么问了 :-) 非常有用,这个功能!
  • 这个功能很有用,谢谢!我将把它添加到我的代码中,我有一个解决方法,我将代码拆分为 20 个单独的列,然后创建 20 个数据帧,其中包含 event_id、codecolumn 1(到 20)、staff_id,然后将它们重新绑定在一起并删除空白。几乎是最不好看的代码,但它确实有效!谢谢。
【解决方案2】:

可以试试:

(df 是你的数据集)

event_id <- c(124456,123849)
code <- c(".CCDSS",".SSBBS")
staff_id <- c(2222,2222)
df <- data.frame(event_id,code,staff_id)

A<-apply(df,1,function(x)data.frame(event_id=x[[1]],code=unlist(strsplit(x[[2]],"")),staff_id=x[[3]]))
do.call(rbind,A)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2017-07-22
    相关资源
    最近更新 更多