2014-10-31 39 views
1

我正在尝试重新采样数据帧的元素。我打开使用其他数据结构的话推荐,但我的理解是,DF将是混合字符串,数字更好,等数据帧中的采样元素

比方说,我的输入该数据帧:

16 x y z 2 
11 a b c 1 
......... 

我想培养作为输出另一个数据结构(我取,另一个DF)是这样的:

16 x y z 
16 x y z 
11 a b c 
......... 

我想我的主要问题是要追加的内容的方式,这是对列DF [,1 :4]。

在此先感谢,p。

回答

3

这是从你的描述不清楚,但所需输出意味着你要根据5列重复列1:4,这应该做的工作

df[rep(seq_len(nrow(df)), df[, 5]), -5] 
#  V1 V2 V3 V4 
# 1 16 x y z 
# 1.1 16 x y z 
# 2 11 a b c 
+0

是的,那个聪明的组合完成了这个诀窍。它也可以通过for循环以不太优雅的方式完成。谢谢 – user3310782 2014-10-31 15:02:29

0

如果你想更换从df数据帧n行示例:

df[sample(nrow(df), n, replace=TRUE), ]

2

假设你是从类似的开始:

mydf 
# V1 V2 V3 V4 V5 
# 1 16 x y z 2 
# 2 11 a b c 1 

然后,你可以只使用expandRows从我的“splitstackshape”包,就像这样:

library(splitstackshape) 
expandRows(mydf, count = "V5") 
#  V1 V2 V3 V4 
# 1 16 x y z 
# 1.1 16 x y z 
# 2 11 a b c 

默认情况下,该功能假定您是基于现有的扩展数据集列,但是您可以像count参数一样轻松添加数字向量,并设置count.is.col = FALSE

+0

Whaaat,这很好 – 2014-10-31 17:06:13

+0

@RichardScriven,它本质上是David的答案,还有一些其他的花里胡哨的......也许我应该CW ...... – A5C1D2H2I1M1N2O1R2T1 2014-10-31 17:10:34

+0

现在我明白了。只是阅读源代码 – 2014-10-31 17:11:01