0

我的数据如下所示:

fruit          ID
apple          1
mango          1
orange         1
grapes         2
strawberries   3

我想使用 reshape 做的是以下内容:

ID     Fruit
 1     apple,mango,orange 
 2     grapes
 3     strawberries

我试过重塑

rehshape(data=test,direction="long",varying=c(1,2),v.names="v1",timevar="v2",times=c(1,2))->test.long              

但这显然是错误的。

4

3 回答 3

3

你可以试试aggregate

aggregate(fruit ~ ID, data , paste, sep=',')

  ID                fruit
1  1 apple, mango, orange
2  2               grapes
3  3         strawberries
于 2013-02-28T16:47:50.240 回答
2

既然其他人都已经aggregate介绍过了,这里有一种方法可以reshape为你工作:为你添加一个时间变量data.frame,然后尝试从长到宽重塑。假设您的原件data.frame名为“mydf”:

> # Create a time variable
> mydf$time <- ave(mydf$ID, mydf$ID, FUN = seq_along)
> mydf
         fruit ID time
1        apple  1    1
2        mango  1    2
3       orange  1    3
4       grapes  2    1
5 strawberries  3    1

> # Now, reshape
> reshape(mydf, direction = "wide", idvar = "ID", timevar = "time")
  ID      fruit.1 fruit.2 fruit.3
1  1        apple   mango  orange
4  2       grapes    <NA>    <NA>
5  3 strawberries    <NA>    <NA>
于 2013-02-28T16:47:12.817 回答
2

试试这个

> aggregate(fruit~ID, data=DF, FUN=paste0)
  ID                fruit
1  1 apple, mango, orange
2  2               grapes
3  3         strawberries
于 2013-02-28T16:49:18.903 回答