【问题标题】:Reshape in R, rows to vectors在 R 中重塑形状,将行转换为向量
【发布时间】:2013-02-14 23:09:30
【问题描述】:

我的数据如下所示:

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              

但这显然是错误的。

【问题讨论】:

  • 我认为您的术语完全错误。首先,“行到向量”是什么意思?其次,您在输出中显示的内容实际上更能描述聚合,而不是重塑。

标签: r aggregate reshape


【解决方案1】:

由于其他人都覆盖了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>

【讨论】:

  • @Roshini,很抱歉,但我不知道您指的是什么。你能解释一下吗?
【解决方案2】:

你可以试试aggregate

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

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

【讨论】:

    【解决方案3】:

    试试这个

    > aggregate(fruit~ID, data=DF, FUN=paste0)
      ID                fruit
    1  1 apple, mango, orange
    2  2               grapes
    3  3         strawberries
    

    【讨论】:

    • 当我发布几乎相同的答案时,很难不给你和@geektrader 两个赞成票 :)
    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2018-01-12
    • 2021-08-14
    • 2019-01-06
    • 2020-02-09
    • 1970-01-01
    相关资源
    最近更新 更多