【问题标题】:Adding a line of text between each line of existing text R在现有文本 R 的每一行之间添加一行文本
【发布时间】:2013-11-11 20:54:33
【问题描述】:

所以我有一个包含序列号的单列数据框。例如:

15161718191a
17272892020c
37464748494f
16263738393g
17738393303a
83849404040d

我想在每个序列号之间添加一个“计数器行”标识符,使其看起来像这样:

Code1
15161718191a
Code2
17272892020c
Code3
37464748494f
Code4
16263738393g
Code5
17738393303a
Code6
83849404040d

如您所见,“代码”一词保持不变,但它后面的数字是迭代的(代码 1、代码 2 等)。对于包含数千个序列码的数据集,有没有办法自动执行此操作?

谢谢!

【问题讨论】:

  • 您真的不想在现有行之间添加那些新行,是吗?你的意思是你想创建第二个变量?
  • 不,我需要它们在字里行间。该结构对于我正在运行的 UNIX 代码至关重要。

标签: r text edit


【解决方案1】:

这是一种有点复杂的做法:

# Create some data
df<-data.frame(col=sample(LETTERS,100,replace=TRUE))
# Convert to a matrix, then convert to a vector.
df2<-data.frame(col=c(t(data.frame(paste0('Code',seq_along(df$col)),df$col))))
#     col
# 1 Code1
# 2     P
# 3 Code2
# 4     H
# 5 Code3
# 6     P

【讨论】:

    【解决方案2】:

    我能想到的最直接的方法。创建一个新的数据框。

    df = data.frame( col=c("15161718191a",
                     "17272892020c",
                     "37464748494f",
                     "16263738393g",
                     "17738393303a",
                     "83849404040d"),
                     stringsAsFactors=FALSE)
    
    n = nrow(df)
    df2 = data.frame(col=rep(NA,2*n))
    df2[1:n*2-1,] = df
    df2[1:n*2,] = paste0( "Code", 1:n )
    

    【讨论】:

      【解决方案3】:

      另一种方式,只是为了好玩:

      d <- read.table(text='15161718191a
      17272892020c
      37464748494f
      16263738393g
      17738393303a
      83849404040d', stringsAsFactors=FALSE)
      data.frame(mycol=as.vector(rbind(paste0('Code', 1:nrow(d)), d[,1])))
      #           mycol
      # 1         Code1
      # 2  15161718191a
      # 3         Code2
      # 4  17272892020c
      # 5         Code3
      # 6  37464748494f
      # 7         Code4
      # 8  16263738393g
      # 9         Code5
      # 10 17738393303a
      # 11        Code6
      # 12 83849404040d
      

      【讨论】:

      • 谢谢!这要简单得多。