【问题标题】:Duplicate column values by value in second column按第二列中的值复制列值
【发布时间】:2013-02-01 20:43:09
【问题描述】:

我有一个如下所示的数据框:

a<-c('a', 'b', 'c', 'd', 'e')

b<-c(1, 2, 3, 2, 3)

df<-data.frame(a, b)

      a b
    1 a 1
    2 b 2
    3 c 3
    4 d 2
    5 e 3

我想用 b 列中的数字复制 a 列中的值,以便得到一个如下所示的 vector/data.frame:

c<-c('a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'e', 'e', 'e')

       c
    1  a
    2  b
    3  b
    4  c
    5  c
    6  c
    7  d
    8  d
    9  e
    10 e
    11 e

感谢您的建议。

【问题讨论】:

  • rep(a, b) 怎么样?关键词可能是“复制”而不是“重复”
  • @liuminzhao 这听起来像是一个答案,而不是评论! :)

标签: r


【解决方案1】:

?rep,如:

> with(df, rep(a, times = b))
 [1] a b b c c c d d e e e
Levels: a b c d e

因素位很烦人,因为它是 R 在 df 中创建 b 的方式。要么做

> df <- data.frame(a, b, stringsAsFactors = FALSE)
> with(df, rep(a, times = b))
 [1] "a" "b" "b" "c" "c" "c" "d" "d" "e" "e" "e"

然后上面的答案,或者只是将结果强制转换为字符向量:

> with(df, as.character(rep(a, times = b)))
 [1] "a" "b" "b" "c" "c" "c" "d" "d" "e" "e" "e"

【讨论】:

    【解决方案2】:

    如果你想扩展整个data.frame,你可以使用这样的东西:

    df <- data.frame(a = c('a', 'b', 'c', 'd', 'e'),
                     b = c(1, 2, 3, 2, 3))
    df[rep(rownames(df), df$b), ]
    #     a b
    # 1   a 1
    # 2   b 2
    # 2.1 b 2
    # 3   c 3
    # 3.1 c 3
    # 3.2 c 3
    # 4   d 2
    # 4.1 d 2
    # 5   e 3
    # 5.1 e 3
    # 5.2 e 3
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      相关资源
      最近更新 更多