【发布时间】:2019-04-25 19:37:13
【问题描述】:
我需要在现有数据帧上使用多个条件创建一个新数据帧。
我尝试使用 dplyr 函数,特别是针对多个条件进行总结,但由于应用条件后数据集大小减小,因此失败了。
为了解释,下面是我想要实现的一个简单示例。
df <- data.frame(User = c("Newton","Newton","Newton","Newton","Newton"),
Location = c("A","A","B","A","B"),
Movement = c(10,10,20,20,30),
Unit = c(-2,2,2,-2,-1),
Time = c("4-20-2019","4-20-2019","4-21-2019","4-21-2019"
,"4-23-2019"))
dfNew <- data.frame(User = c("Newton","Newton","Newton"),
FromLocation = c("A","A","B"),
ToLocation = c("A","B","B"),
Movement = c(10,20,30),
Units = c(2,2,-1))
dfNew的计算条件如下:
看df的第一行: a) 如果移动为 10 且单位为负 - 忽略此行
看df的第二行: a) 如果移动为 10 且单位为正 - FromLocation 和 ToLocation 均为 A,且 Units 取自 df,即 2
看df的第三行: a) 如果移动为 20 且单位为正 - ToLocation (B) 和 Units (2) 必须取自这一行,FromLocation 必须取自下一行
看df的第四行: a) 如果移动为 20 且单位为负 - dfnew 上一行的 FromLocation(A) 必须取自该行
看df的第五行: a) 如果移动类型为 30,则 ToLocation 和 FromLocation 都将为 B,单位将与 df 相同,即 -1
另一种可能有用的模式是每个动作都将在同一天/同一时间发生。另请注意,该示例仅适用于 1 个用户,我有超过 2000 个必须应用类似条件的用户。
就像我说的那样,我尝试使用 dplyr 并汇总所有这些条件,但由于数据集的大小不同,我可以找到一种方法来使其工作。
感谢任何建议,谢谢!
【问题讨论】: