如何创建包含R中每行中所有条目的数据集?

时间:2015-06-23 21:16:34

标签: r formatting dataset subset

假设我有一个大型数据集,并根据条目类型和该类型条目的出现次数来组织信息。

说...

   Area        Animal                              Observations       
   US           Cat                                   4
   NE           Cat                                   9
   US           Dog                                   2

我的问题是如何创建一个数据集(在R中进行分析),列出像...这样的项目。

说...

   Area        Animal      
    US            Cat
    US            Cat
    US            Cat...
    US
    NE
    NE
    NE
    NE....
    US..          Dog..

我问,因为我有一个大数据集,我试图获取每一行的每个条目,而不是它们被分组。有谁知道怎么做?

3 个答案:

答案 0 :(得分:1)

尝试

library(splitstackshape)
expandRows(df1, 'Observations')
#   Area Animal
#1     US    Cat
#1.1   US    Cat
#1.2   US    Cat
#1.3   US    Cat
#2     NE    Cat
#2.1   NE    Cat
#2.2   NE    Cat
#2.3   NE    Cat
#2.4   NE    Cat
#2.5   NE    Cat
#2.6   NE    Cat
#2.7   NE    Cat
#2.8   NE    Cat
#3     US    Dog
#3.1   US    Dog

答案 1 :(得分:1)

通过'rownames'对数据框进行索引,重复次数为'Observations':

> rep(rownames(dat), dat$Observations)
 [1] "1" "1" "1" "1" "2" "2" "2" "2" "2" "2" "2" "2" "2" "3" "3"

> dat[ rep(rownames(dat), dat$Observations) , ]
    Area Animal Observations
1     US    Cat            4
1.1   US    Cat            4
1.2   US    Cat            4
1.3   US    Cat            4
2     NE    Cat            9
2.1   NE    Cat            9
2.2   NE    Cat            9
2.3   NE    Cat            9
2.4   NE    Cat            9
2.5   NE    Cat            9
2.6   NE    Cat            9
2.7   NE    Cat            9
2.8   NE    Cat            9
3     US    Dog            2
3.1   US    Dog            2

答案 2 :(得分:1)

以下是使用lapply()rep()的方法:

df <- data.frame(Area=c('US','NE','US'), Animal=c('Cat','Cat','Dog'), Observations=c(4,9,2) );
as.data.frame(lapply(df[-3],rep,df[,3]));
##    Area Animal
## 1    US    Cat
## 2    US    Cat
## 3    US    Cat
## 4    US    Cat
## 5    NE    Cat
## 6    NE    Cat
## 7    NE    Cat
## 8    NE    Cat
## 9    NE    Cat
## 10   NE    Cat
## 11   NE    Cat
## 12   NE    Cat
## 13   NE    Cat
## 14   US    Dog
## 15   US    Dog