【问题标题】:Convert columns into multiple rows per entry in R [duplicate]将R中的每个条目的列转换为多行[重复]
【发布时间】:2013-10-22 23:30:54
【问题描述】:

我有以下数据:

word 2013 年 1 月 2013 年 2 月 2013 年 3 月 一个 1 2 3 乙 5 2 4

我想将多个日期列转换为一个名为日期的列,并为该值添加一个附加列。

单词日期值 A 2013 年 1 月 1 A 2013 年 2 月 2 A 2013 年 3 月 3 B 2013 年 1 月 5 B 2013 年 2 月 2 B 2013 年 3 月 4

有人可以帮忙吗?

谢谢

【问题讨论】:

  • 至少对于 R 案例...
  • @krlmlr,我添加了一个 Excel 解决方案以减少重复。

标签: r excel reshape


【解决方案1】:

其他 R 选项

除了 Metrics 的回答之外,这里还有两个 R 选项(假设您的 data.frame 称为“mydf”):

cbind(mydf[1], stack(mydf[-1]))

library(reshape)
melt(mydf, id.vars="word")

Excel 选项

我不是 Excel 用户,但由于这个问题也被标记为“Excel”,我建议Tableau Reshaper Excel add-on。

对于您的示例,它非常简单:

  1. 安装并激活插件后,转到“Tableau”菜单。

  2. 选择包含要取消堆叠的值的单元格。点击确定。

  3. 查看结果。

【讨论】:

  • +1:我不知道excel里有reshape。
  • @Metrics,实际上我什至没有 Excel 的副本。不得不借一台电脑来写这个答案。但是,我记得在 Tableau 博客上读过一些与 Hadley 的“Tidy Data”论文在概念上相似的内容,他们也提到了这个附加组件。所以,这对我来说也是新的:-)
  • 使用 GIF 的答案要好得多。 :)
【解决方案2】:

使用来自 base R 的reshape(df1 是您的数据框)

 reshape(df1,times=names(df1)[-1],timevar="date",varying=names(df1)[-1],v.names="value",new.row.names=1:6,ids=NULL,direction="long")
  word     date value
1    A Jan.2013     1
2    B Jan.2013     5
3    A Feb.2013     2
4    B Feb.2013     2
5    A Mar.2013     3
6    B Mar.2013     4

【讨论】:

  • R 中的reshape 何时出现?我已经习惯用reshape2::melt...
  • @krlmlr, reshape 只要我一直在使用它,它就一直是基础 R 的一部分。它通常比当前的 melt + *cast 方法快得多,尽管我知道这些方法会自己获得一些速度提升。指标,+1 表示基础 R :-)
猜你喜欢
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 2020-02-16
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多