对数据部分进行计算并求平均值

时间:2018-08-06 17:04:18

标签: r

我正在尝试将R用于研究,但发现读取文件的一部分并进行一些计算并对计算完成的次数取平均值是具有挑战性的。例如。我有一个像这样的文件:

框架

           1

 atoms in the system

       14657

 Box Dimensions
   5.870700    
   5.870700    
   5.870700    

 Methane molecules Trajectory
  14601  1      4.043000        1.539000        3.324000
  14602  1      3.979000        3.490000        1.266000
  14603  1      0.276000        1.889000        1.967000
  14604  1      3.710000        5.806000        1.362000
  14605  1      1.467000        1.433000        2.991000
  14606  1      2.675000        3.919000        1.486000
  14607  1      5.483000        0.201000        0.685000
  14608  1      5.371000        5.367000        3.819000

 frame
           2

 atoms in the system
       14657

 Box Dimensions
   5.870700    
   5.870700    
   5.870700    

 Methane molecules Trajectory
  14601  1      4.043000        1.539000        3.324000
  14602  1      3.979000        3.490000        1.266000
  14603  1      0.276000        1.889000        1.967000
  14604  1      3.710000        5.806000        1.362000
  14605  1      1.467000        1.433000        2.991000
  14606  1      2.675000        3.919000        1.486000
  14607  1      5.483000        0.201000        0.685000
  14608  1      5.371000        5.367000        3.819000

 frame
           3

 atoms in the system
       14657

 Box Dimensions
   5.870700    
   5.870700    
   5.870700    

 Methane molecules Trajectory
  14601  1      4.043000        1.539000        3.324000
  14602  1      3.979000        3.490000        1.266000
  14603  1      0.276000        1.889000        1.967000
  14604  1      3.710000        5.806000        1.362000
  14605  1      1.467000        1.433000        2.991000
  14606  1      2.675000        3.919000        1.486000
  14607  1      5.483000        0.201000        0.685000
  14608  1      5.371000        5.367000        3.819000

我需要跳过每帧的前9行,并用3-5列进行计算。我必须为每个框架重复计算并找到平均值。请您指导我。谢谢。

1 个答案:

答案 0 :(得分:0)

如果我正确理解,以下代码将从文件中读取示例数据集中的表。

首先,以交互方式(或通过所需的任何方法)选择文件。

fl <- file.choose()

现在,阅读完整的表,每个表有5列。

lns <- readLines(fl)
frm <- grep("frame", lns, ignore.case = TRUE)
frm <- c(frm[-1], length(lns))
mth <- grep("methane", lns, ignore.case = TRUE)

df_list <- lapply(seq_along(frm), function(i) {
  con <- textConnection(lns[ (mth[i] + 1):(frm[i] - 1) ])
  dat <- read.table(con)
  close.connection(con)
  dat
})

最后,如果只需要第3、4和5列,将提取它们并生成一个名为df_list3的列表。

df_list3 <- lapply(df_list, '[', 3:5)