我有一个如下所示的数据框:
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
感谢您的建议。
答案 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