在第二列中按值复制列值

时间:2013-02-01 20:43:09

标签: r

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

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

我想将列a中的值复制到b列中的数字,以便得到一个如下所示的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

感谢您的建议。

2 个答案:

答案 0 :(得分: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

因子位很烦人,因为它是b中R创建df的方式。 <或者

> 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"

答案 1 :(得分: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