分离多个观察 R
Separating Multiple Observations R
我在一个数据框中有两列,Worker_ID 和 Location_ID。每行包含特定工作人员所在的位置。这些列可以有多个相同的 Worker_ID,基于不同的 Location_ID 或相同。此数据来自多个月,因此可能存在多个相同行的工作人员和位置 ID。
示例如下:
Worker_ID Location_ID
124893842 43432585855
148934855 38495485433
243243535 53535958383
我想显示此数据,以便我可以看到每个 Worker_ID 以及它旁边列中的所有相应位置,以便稍后可以可视化此数据。我试过重塑,但我似乎无法让它正常工作。有人知道我该怎么做吗?
此解决方案创建一个向量列表,其中包含每个唯一 Worker_ID 的位置。
l <- lapply(unique(d$Worker_ID), function(x) d[d$Worker_ID==x, 'Location_ID'])
names(l) <- unique(d$Worker_ID)
print(l)
# $`124893842`
# [1] 43432585855
#
# $`148934855`
# [1] 38495485433 53535958383 53535958384 53535958385
#
# $`243243535`
# [1] 53535958383
(我添加了一些条目来扩展数据集并说明这一点)
假设每个 worker_id 的唯一 location_id 值数量有限,您可以这样做:
library(dplyr)
library(tidyr)
df <- data_frame(
worker_id = c(1, 1, 2, 2, 3, 3),
location_id = c(1, 2, 3, 4, 1, 4)
)
df %>%
group_by(worker_id) %>%
mutate(location_number = row_number()) %>%
spread(location_number, location_id, sep = '_')
# A tibble: 3 x 3
# Groups: worker_id [3]
worker_id location_number_1 location_number_2
* <dbl> <dbl> <dbl>
1 1 1 2
2 2 3 4
3 3 1 4
我使用了一些编造的数据,因为您的数据似乎不能代表您的问题和所需的输出。此解决方案将起作用,但会生成与单个工作人员所在的唯一位置的最大数量一样多的列。
我在一个数据框中有两列,Worker_ID 和 Location_ID。每行包含特定工作人员所在的位置。这些列可以有多个相同的 Worker_ID,基于不同的 Location_ID 或相同。此数据来自多个月,因此可能存在多个相同行的工作人员和位置 ID。
示例如下:
Worker_ID Location_ID
124893842 43432585855
148934855 38495485433
243243535 53535958383
我想显示此数据,以便我可以看到每个 Worker_ID 以及它旁边列中的所有相应位置,以便稍后可以可视化此数据。我试过重塑,但我似乎无法让它正常工作。有人知道我该怎么做吗?
此解决方案创建一个向量列表,其中包含每个唯一 Worker_ID 的位置。
l <- lapply(unique(d$Worker_ID), function(x) d[d$Worker_ID==x, 'Location_ID'])
names(l) <- unique(d$Worker_ID)
print(l)
# $`124893842`
# [1] 43432585855
#
# $`148934855`
# [1] 38495485433 53535958383 53535958384 53535958385
#
# $`243243535`
# [1] 53535958383
(我添加了一些条目来扩展数据集并说明这一点)
假设每个 worker_id 的唯一 location_id 值数量有限,您可以这样做:
library(dplyr)
library(tidyr)
df <- data_frame(
worker_id = c(1, 1, 2, 2, 3, 3),
location_id = c(1, 2, 3, 4, 1, 4)
)
df %>%
group_by(worker_id) %>%
mutate(location_number = row_number()) %>%
spread(location_number, location_id, sep = '_')
# A tibble: 3 x 3
# Groups: worker_id [3]
worker_id location_number_1 location_number_2
* <dbl> <dbl> <dbl>
1 1 1 2
2 2 3 4
3 3 1 4
我使用了一些编造的数据,因为您的数据似乎不能代表您的问题和所需的输出。此解决方案将起作用,但会生成与单个工作人员所在的唯一位置的最大数量一样多的列。