【问题标题】:Reshape the Columns of Data Frame in R重塑 R 中数据框的列
【发布时间】:2015-09-30 02:25:31
【问题描述】:

我有一个数据框(例如)

 Week Bags
 4     5
 6     3
10     5
13     7
18     5
23     1
30     9
31     9
32     4
33     7
35     1
38     2
42     2
47     2

“周”列表示一年中的周数,“袋”表示小公司使用的袋数。 我想要我的数据框形式为 Week Bags 1 0 2 0 3 0 4 5 5 0 6 3 7 0 8 0 9 0 10 5 以此类推,以绘制袋数每周的变化。 我确信这是一个非常愚蠢的问题,但我找不到任何方法。请朝这个方向提供帮助。

【问题讨论】:

  • aggregate(Bags ~ Week, data = rbind(dd, data.frame(Week = 1:50, Bags = 0)), sum) 也适用于本示例

标签: r dataframe


【解决方案1】:

您可以创建另一个数据集

df2 <- data.frame(Week= 1:max(df1$Week))

然后merge 与第一个数据集

res<- merge(df1, df2, all=TRUE)
res$Bags[is.na(res$Bags)] <- 0
head(res,10)
#  Week Bags
#1     1    0
#2     2    0
#3     3    0
#4     4    5
#5     5    0
#6     6    3
#7     7    0
#8     8    0
#9     9    0
#10   10    5

或使用data.table

library(data.table)
res1 <- setDT(df1, key='Week')[J(Week = 1:max(Week))][is.na(Bags), Bags:=0][]

【讨论】:

  • 亲爱的 Akrun,感谢您的快速回复。我的数据框来自之前的一些计算。它显示“周”作为因素。这给您提供的解决方案造成了麻烦。
  • @Pankaj 你可以通过df1$Week &lt;- as.numeric(as.character(df1$Week))转换成numeric
  • 知道了,我做到了,但不是在外面。感谢您的解决方案。
  • 那个 data.table 解决方案就是钱。 +1
猜你喜欢
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
相关资源
最近更新 更多