r - 从不同的文件增量地对行进行子集

标签 r subset

我有几个文件 (60) 包含具有相同列名的表。我写下其中三个的例子。
我需要的是从每个文件(for(i in files) source(i) ?)中读取数据并从中创建一个表,我从每个文件中为每个 ID 提取一行(包含所有变量)。第一行从某个日期开始,在下一个文件中增加一个。
例如,第一个文件中的“起始”行将是行号。 10 日,从 1 月 10 日开始。
10 ID1 2000-01-10 20
现在,我跳转到下一个文件,我搜索相同的 ID 并对行号进行子集。 11(增加一天)表示从第二天开始的日期,2000-01-11
转到下一个文件,相同的 ID,子集行号。 12(与前一个文件相比增加1)等。
每个 ID 子集的行数等于文件数。迭代一直持续到我们到达 ID1 或最后一个文件的所有行。
然后,我们对下一个 ID 重复上述操作,即 ID2,其中起始行也来自第一个文件,并且与 ID1 具有相同的起始日期。它也是相对于其 ID 的行号 10,但在文件中为 22:22 = 10(ID1 + 2 增量)。

 Day =  seq(as.Date("2000-01-01"), length = 12, by = "days")                
file1: 
set.seed(123)
  df1 <- data.frame( rowid =  c(1:24),
          ID = c("ID1", "ID1","ID1", "ID1","ID1", "ID1","ID1", "ID1",  "ID1", "ID1","ID1", 
              "ID1","ID2", "ID2", "ID2", "ID2","ID2", "ID2", "ID2", "ID2","ID2", "ID2", "ID2", "ID2"),
          Date =  rep(Day, 2),
          Var1 = sample(1:30, 24, TRUE) )
file2:
set.seed(123)
   df2 <- data.frame( rowid =  c(1:24),
              ID = c("ID1", "ID1","ID1", "ID1","ID1", "ID1","ID1", "ID1",  "ID1", "ID1","ID1", "ID1","ID2", "ID2", "ID2", "ID2","ID2", "ID2", "ID2", "ID2","ID2", "ID2", "ID2", "ID2"),
              Date =  rep(Day, 2),
              Var1 = sample(40:60, 24, TRUE))
file3:
set.seed(123)
  df3 <- data.frame(rowid =  c(1:24),
              ID = c("ID1", "ID1","ID1", "ID1","ID1", "ID1","ID1", "ID1",  "ID1", "ID1","ID1", "ID1","ID2", "ID2", "ID2", "ID2","ID2", "ID2", "ID2", "ID2","ID2", "ID2", "ID2", "ID2"),
              Date =  rep(Day, 2),
              Var1 = sample(70:100, 24, TRUE))

  
     
输出应如下所示:
              10 ID1 2000-01-10   20
              11 ID1 2000-01-11   44
              12 ID1 2000-01-12   83
              22 ID2 2000-01-10    9
              23 ID2 2000-01-11   50
              24 ID2 2000-01-12   98       
关于如何获得它的任何想法?
谢谢

最佳答案

像这样准备你的输入:

df_list <- list(df1, df2, df3)
start <- 10
你可以这样做:
library(purrr)
library(dplyr)

imap_dfr(df_list, \(file, index) split(file, ~ ID) %>%
     map_dfr(~ slice(.x, start - 1 + index))) %>%
  arrange(ID)
返回所需的:
  rowid  ID       Date Var1
1    10 ID1 2000-01-10   20
2    11 ID1 2000-01-11   44
3    12 ID1 2000-01-12   83
4    22 ID2 2000-01-10    9
5    23 ID2 2000-01-11   50
6    24 ID2 2000-01-12   98

关于r - 从不同的文件增量地对行进行子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68023016/

相关文章:

r - 查找列中特定值的最大值?

python - 如何找到集合 A 的所有子集组?在 Python 中设置分区

r - 通过现有对象对数据框进行子集化

debugging - 没有抛出错误的错误

arrays - 在 julia 中获取多维数组的一维子集

java - SortedSet 的元素类型允许计算给定值的后继

r - 默认情况下覆盖 [.data.frame 以删除未使用的因子水平

R:在predict()中数字 'envir' arg的长度不是1

r - 从字符不精确中转换数字

r - 计算一段时间内的返回