如何格式化包含所有时间和id值记录的透视表? [英] How to format a pivot like table that includes records for all time and id values?

查看:10
本文介绍了如何格式化包含所有时间和id值记录的透视表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在收集包含3列的R中的日志:
周、探测和观察次数。
没有观察就没有记录。

week=c(1,2,2,4)  
probe=c("A","C","B","C")  
obs=c(2,4,3,1)
logs=data.frame(week,probe,obs)

logs

week probe obs  
1     A   2
2     C   4
2     B   3
4     C   1

我想重新格式化数据,使其包括所有周和所有探测,即使没有观测,结果如下所示:

week probe obs  
1     A   2  
1     B   0  
1     C   0  
1     D   0  
2     A   0  
2     B   0  
2     C   3  
2     D   4  
3     A   0  
3     B   0  
3     C   0  
3     D   0  
4     A   0  
4     B   0  
4     C   1  
4     D   0  

我这里有所有探测器的列表:

allprobes=c("A","B","C","D")

我想看看这几周:

allweeks=c(1:4)

我一直在寻找熔化,铸造,重塑,但我只设法得到一个ID或每月一行… 因为我实际上想要保留日志的原始格式。 乍一看似乎很容易,但我现在被困住了。 对如何以这种方式设置数据格式有什么建议吗?

非常感谢您的帮助。

推荐答案

基本R中的两个选项:

使用expand.gridmerge

> fullFrame <- expand.grid(allweeks, allprobes)
> names(fullFrame) <- c("week", "probe")
> merge(fullFrame, logs, all = TRUE)
   week probe obs
1     1     A   2
2     1     B  NA
3     1     C  NA
4     1     D  NA
5     2     A  NA
6     2     B   3
7     2     C   4
8     2     D  NA
9     3     A  NA
10    3     B  NA
11    3     C  NA
12    3     D  NA
13    4     A  NA
14    4     B  NA
15    4     C   1
16    4     D  NA

expand.grid将创建一个data.frame,其中包含您的所有可能的"allProbe"和"allWeek"对象的组合。然后,当使用merge时,我们将重命名新data.frame的列,以匹配您的"Logs"data.frame中的相关列。参数all = TRUE告诉mergeNA填充缺失的值。

如果需要0而不是NA,请执行以下操作:

fullFrame <- expand.grid(allweeks, allprobes)
names(fullFrame) <- c("week", "probe")
finalLogs <- merge(fullFrame, logs, all = TRUE)
finalLogs[is.na(finalLogs)] <- 0

将"Week"和"Probe"转换为系数后使用xtabs

如果您将Week和Probe转换为包含所有相关级别的因子,则只需在data.frame中使用xtabs

logs$week <- factor(logs$week, levels=c(1, 2, 3, 4))
logs$probe <- factor(logs$probe, levels=c("A", "B", "C", "D"))
data.frame(xtabs(obs ~ week + probe, logs))
#    week probe Freq
# 1     1     A    2
# 2     2     A    0
# 3     3     A    0
# 4     4     A    0
# 5     1     B    0
# 6     2     B    3
# 7     3     B    0
# 8     4     B    0
# 9     1     C    0
# 10    2     C    4
# 11    3     C    0
# 12    4     C    1
# 13    1     D    0
# 14    2     D    0
# 15    3     D    0
# 16    4     D    0

这篇关于如何格式化包含所有时间和id值记录的透视表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆