根据特定序列连接数据
concatenate data based on a certain sequence
我的数据看起来是这样的,变量天的范围从 1 到 232。这只是数据的一个较短版本,真实数据有超过 20000000 行,变量 'day' 范围从 1 到 232
day time
1 2
1 2
2 2
2 3
3 4
3 5
4 4
4 2
我有一个向量,其中包含 1000 个随机选择的可变日序列 (1-232),比如
df=c(3,4,1,2,...,4,1,3)
我想创建一个根据顺序排序的新数据集。我们首先从数据中提取 day=3,然后提取 day=4,然后提取 day=1 和 rbind。例如,前 4 个序列应如下所示:
day time
3 4
3 5
4 4
4 2
1 2
1 2
2 2
2 3
如果我没理解错的话,你可以使用 data.table()
:
以非常直接的方式完成此操作
library(data.table)
df <- fread(text = "day time
1 2
1 2
2 2
2 3
3 4
3 5
4 4
4 2", header = TRUE)
seqs <- data.table(day = c(3,4,1,2,4,1,3))
df[seqs, on = "day"]
#> day time
#> 1: 3 4
#> 2: 3 5
#> 3: 4 4
#> 4: 4 2
#> 5: 1 2
#> 6: 1 2
#> 7: 2 2
#> 8: 2 3
#> 9: 4 4
#> 10: 4 2
#> 11: 1 2
#> 12: 1 2
#> 13: 3 4
#> 14: 3 5
由 reprex package (v0.2.1)
于 2019-02-10 创建
基础 R 方法:
x <- structure(list(day = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L), time = c(2L,
2L, 2L, 3L, 4L, 5L, 4L, 2L)), class = "data.frame", row.names = c(NA,
-8L))
df <- c(3,4,1,2,4,1,3)
do.call("rbind.data.frame", lapply(df, function(i) subset(x, day == i)))
# day time
# 5 3 4
# 6 3 5
# 7 4 4
# 8 4 2
# 1 1 2
# 2 1 2
# 3 2 2
# 4 2 3
# 71 4 4
# 81 4 2
# 11 1 2
# 21 1 2
# 51 3 4
# 61 3 5
do.call("rbind.data.frame", ...)
的使用容易出现典型的 data.frame
实例化,这意味着如果您的真实数据有任何 character
类型的列,您可能想要
do.call("rbind.data.frame", c(lapply(df, function(i) subset(x, day == i)), stringsAsFactors = FALSE))
此外,它可以很容易地用 data.table::rbindlist
或 dplyr::bind_rows
.
替换(没有 factor
s 的风险)
我的数据看起来是这样的,变量天的范围从 1 到 232。这只是数据的一个较短版本,真实数据有超过 20000000 行,变量 'day' 范围从 1 到 232
day time
1 2
1 2
2 2
2 3
3 4
3 5
4 4
4 2
我有一个向量,其中包含 1000 个随机选择的可变日序列 (1-232),比如
df=c(3,4,1,2,...,4,1,3)
我想创建一个根据顺序排序的新数据集。我们首先从数据中提取 day=3,然后提取 day=4,然后提取 day=1 和 rbind。例如,前 4 个序列应如下所示:
day time
3 4
3 5
4 4
4 2
1 2
1 2
2 2
2 3
如果我没理解错的话,你可以使用 data.table()
:
library(data.table)
df <- fread(text = "day time
1 2
1 2
2 2
2 3
3 4
3 5
4 4
4 2", header = TRUE)
seqs <- data.table(day = c(3,4,1,2,4,1,3))
df[seqs, on = "day"]
#> day time
#> 1: 3 4
#> 2: 3 5
#> 3: 4 4
#> 4: 4 2
#> 5: 1 2
#> 6: 1 2
#> 7: 2 2
#> 8: 2 3
#> 9: 4 4
#> 10: 4 2
#> 11: 1 2
#> 12: 1 2
#> 13: 3 4
#> 14: 3 5
由 reprex package (v0.2.1)
于 2019-02-10 创建基础 R 方法:
x <- structure(list(day = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L), time = c(2L,
2L, 2L, 3L, 4L, 5L, 4L, 2L)), class = "data.frame", row.names = c(NA,
-8L))
df <- c(3,4,1,2,4,1,3)
do.call("rbind.data.frame", lapply(df, function(i) subset(x, day == i)))
# day time
# 5 3 4
# 6 3 5
# 7 4 4
# 8 4 2
# 1 1 2
# 2 1 2
# 3 2 2
# 4 2 3
# 71 4 4
# 81 4 2
# 11 1 2
# 21 1 2
# 51 3 4
# 61 3 5
do.call("rbind.data.frame", ...)
的使用容易出现典型的 data.frame
实例化,这意味着如果您的真实数据有任何 character
类型的列,您可能想要
do.call("rbind.data.frame", c(lapply(df, function(i) subset(x, day == i)), stringsAsFactors = FALSE))
此外,它可以很容易地用 data.table::rbindlist
或 dplyr::bind_rows
.
factor
s 的风险)