【发布时间】:2020-02-21 00:37:13
【问题描述】:
我有一个包含 3 列的示例数据集:JulianDay、Device 和 location。请参阅下面的代码。
structure(list(JulianDay = 40:69, Device = structure(c(1L, 2L,
3L, 1L, 2L, 3L, 1L, 2L, 3L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 1L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L), .Label = c("a",
"b", "c"), class = "factor"), Location = c(1, 2, 3, 1, 2, 3,
1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3,
1, 2, 3)), class = "data.frame", row.names = c(NA, -30L))
查看数据,可以看到设备 a 在第 40、43、46 天位于位置 1。但是设备更改位置,位置 1 在第 49、52、55 天被设备 b 和设备 c 占用在 61、64、67 上。所有三种设备都发生了类似的变化。
现在假设我们只有前两列,但我知道设备更改位置的每个日期以及它去往的位置。我怎么能用这些信息重建第 3 列。显然有 30 行,手动输入很容易,但我正在处理一个有几十万行的真实数据框。
编辑:
structure(list(JulianDay = c(40, 40, 40, 41, 41, 41, 42, 42,
42, 43, 43, 43, 44, 44, 44, 45, 45, 45), Device = structure(c(1L,
2L, 3L, 1L, 2L, 3L, 2L, 3L, 1L, 2L, 3L, 1L, 3L, 1L, 2L, 3L, 1L,
2L), .Label = c("a", "b", "c"), class = "factor"), Location = c(1,
2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)), class = "data.frame", row.names = c(NA,
-18L))
这是一个类似的数据框,可以解决这个问题。每个设备每天都处于活动状态,并且每天都有 3 个位置。如果没有物理位置列(但知道应该包含什么),我想编写如下代码:
if(JulianDay < 41 & Device == 'A') { Location == 1}
if(JulianDay > 41 * JulianDay < 44 & Device == 'A') { Location == 3}
if(JulianDay > 44 & Device == 'A') {Location == 2
这样填写第三列(位置)。
【问题讨论】:
-
这个问题我不清楚。你的意思是特定的一天总是与特定的位置相关联吗?例如,如果 40 为 1,则 41 为 2,42 为 3,43 为 1,依此类推。
-
@MikaelPoulJohannesson 刚刚编辑了帖子。希望这可以消除混乱。
标签: r data-manipulation