1

我有一个看起来像这样的数据框:

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

感谢您的建议。

4

2 回答 2

3

?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

因素位很烦人,因为它是 Rbdf. 要么做

> 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"
于 2013-02-01T20:49:25.567 回答
1

如果你想扩展你的整个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
于 2013-02-02T08:46:27.020 回答