【问题标题】:How to "fill" a variable with dcast如何用 dcast “填充”变量
【发布时间】:2019-09-23 16:10:34
【问题描述】:

作为汽车共享研究的一部分,我使用的表格看起来像这样:

这里的问题是不应该有两条线:这实际上是一个单程(相同的司机,相同的出发时间),“C”应该在第一行,在乘客 2 列中。

因此,当 Date/Hour_dep/Driver 相同时,我试图自动“填充”Passenger2 列。 ID_Dep是另外一回事,每行都会自动生成,CDE002根本就不应该存在。

根据我的阅读,dcast 是我最好的解决方法。但是我...无法弄清楚如何正确使用它。实际上,我什至不确定 dcast 是我应该使用的。 在使用我的真实表的某个时间点,我设法获得了一个列联表,其中包含针对 Passenger2 的每个可能值的一列。如果我能够从最左边的列开始提取第一个非 NA 值,那将给我我想要的表。但我也没有得到它。

这是重新创建表格和我完全不工作的 dcast 的代码,欢迎任何帮助。

test_iddep<-c("AAA1","BBB2")
test_Date<-c("01/05/2019","01/05/2019")
test_hourdep <- c("8:00","8:00")
test_driv<-c("A","A")
test_pass1<-c("B","C")
test_pass2<-c(NA,NA)

test_table <- data.frame(test_iddep,test_Date,test_hourdep,test_driv,test_pass1,test_pass2)

table_arranged <- dcast(test_table, test_driv + test_Date + test_hourdep + test_pass1 ~ test_pass2, 
                        margins=c("test_driv","test_Date","test_hourdep")) 

【问题讨论】:

  • 你的预期输出是什么
  • 嗨,基本上这是我示例的第一行,但将“C”移到了Passenger2,他应该从一开始就在那儿。

标签: r dcast


【解决方案1】:

我怀疑您可以使用许多不同的方法(而且可能更好)。

如果您确实想使用dcast,这可能是一种方法:

首先,我将melt 基于日期、小时和驱动程序的数据。然后将为这些独特组合中的每一个创建一个 id。然后对于每个 id,将为每个乘客添加一个序列号。然后dcast:

library(reshape2)

test_table <- data.frame(
  test_iddep = c("AAA1", "BBB2", "CCC3", "DDD4", "EEE5"),
  test_Date = c("01/05/2019", "01/05/2019", "01/07/2019", "01/07/2019", "01/07/2019"),
  test_hourdep = c("8:00", "8:00", "10:00", "10:00", "10:00"),
  test_driv = c("A", "A", "B", "B", "B"),
  test_pass1 = c("B", "C", "D", "E", "F")
)

x <- melt(test_table[-1], id.vars = c("test_driv", "test_Date", "test_hourdep"))
x$id <- cumsum(!duplicated(x[1:3]))
x$time <- ave(x$id, x$id, FUN=seq_along)
dcast(x, test_driv + test_Date + test_hourdep ~ time, value.var = "value")

  test_driv  test_Date test_hourdep 1 2    3
1         A 01/05/2019         8:00 B C <NA>
2         B 01/07/2019        10:00 D E    F

请让我知道这是否是您对输出的想法。我删除了test_iddep,因为听起来你的问题不需要这样做。

【讨论】:

  • 是的,这正是我的目标。非常感谢!
猜你喜欢
  • 2017-07-11
  • 2014-03-25
  • 2021-02-13
  • 2016-02-19
  • 2016-05-27
  • 2011-12-29
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多