从不同的数据帧中调出连续的行

时间:2017-12-11 09:35:52

标签: r loops lapply

我在列表中导入了60个数据帧。每个dfs都有67500行,如下所示:

$B00300.dat
           ZONE    T..Frame      X0..    I.300.   
1     -152.727318   75.200516  0.000000  0.000000    
2     -150.659950   75.200516  0.000000  0.000000    
3     -148.592582   75.200516  0.000000  0.000000    
4     -146.525213   75.200516  0.000000  0.000000    
5     -144.457845   75.200516  0.000000  0.000000    
6     -142.390477   75.200516  0.000000  0.000000    
7     -140.323109   75.200516  0.000000  0.000000    
8     -138.255741   75.200516  0.000000  0.000000    

我已经能够使用此脚本从所有60个数据帧中调出一个特定行(通过指定值):

list.filenames <- list.files(path = "D:/data")
list.filenames
list.data <- list()
for(i in 1:length(list.filenames)) {
    list.data[[i]] <- read.delim(list.filenames[I], header = TRUE, 
                                 sep = "", skip = 2)
}
names(list.data) <- list.filenames
list.data[1]

lapply(list.data, function(x) {
  filter(x,ZONE==399.259947, T..Frame==-150.142600)
})

现在我想系统地从第35个df的第2个数据帧......(n-34)帧中的第1个数据帧,第(n-1)行调出第n行,依此类推。我怎么能循环呢?

1 个答案:

答案 0 :(得分:0)

您可以尝试这样做:

# Your list of dataframes
myList  <- list(mtcars, mtcars, mtcars)
# nth row to call
startAt <- 3

t(sapply(1:length(myList), function(x) myList[[x]][startAt - x + 1, ]))

1:length(myList)1转到3x == 1获得第一个数据框(myList[[1]])并从中提取第n行([3 - 1 + 1, ])时。
x == 2获取第二个数据帧(myList[[2]])并从中提取第n - 1行([3 - 2 + 1, ])时。