Как применить функцию к конкретному столбцу хранилища кадров данных в списке

У меня есть набор csv-файлов с заголовком, но содержат записи для разных дней, таких как

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title></title>
  <meta name="generator" content="LibreOffice 5.1.4.2 (Linux)" />
  <meta name="created" content="2017-01-13T23:23:37.721354329" />
  <meta name="changed" content="2017-01-13T23:24:34.687494320" />
</head>

<body lang="en-US" dir="ltr">
  <p>
    <br/>
    <br/>

  </p>
  <table width="664" cellpadding="4" cellspacing="0">
    <col width="123">
      <col width="125">
        <col width="125">
          <col width="125">
            <col width="124">
              <tr valign="top">
                <td width="123" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.04in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>arrtime</p>
                </td>
                <td width="125" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.04in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>interaatime</p>
                </td>
                <td width="125" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.04in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>serTime</p>
                </td>
                <td width="125" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.04in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>DepTime</p>
                </td>
                <td width="124" style="border: 1px solid #000000; padding: 0.04in">
                  <p>ActSerTime</p>
                </td>
              </tr>
              <tr valign="top">
                <td width="123" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>8.37</p>
                </td>
                <td width="125" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>0</p>
                </td>
                <td width="125" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>8.39</p>
                </td>
                <td width="125" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>8.40</p>
                </td>
                <td width="124" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0.04in">
                  <p>0.01</p>
                </td>
              </tr>
              <tr valign="top">
                <td width="123" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>8.39</p>
                </td>
                <td width="125" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>2</p>
                </td>
                <td width="125" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>8.40</p>
                </td>
                <td width="125" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>8.42</p>
                </td>
                <td width="124" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0.04in">
                  <p>0.02</p>
                </td>
              </tr>
              <tr valign="top">
                <td width="123" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>8.40</p>
                </td>
                <td width="125" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>1</p>
                </td>
                <td width="125" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>8.42</p>
                </td>
                <td width="125" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0in">
                  <p>8.46</p>
                </td>
                <td width="124" style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0in; padding-bottom: 0.04in; padding-left: 0.04in; padding-right: 0.04in">
                  <p>0.04</p>
                </td>
              </tr>
  </table>
  <p style="margin-bottom: 0in">
    <br/>

  </p>
</body>

</html>

Я использовал код для импорта файлов

    #Scripts to load all the csv files of the queue data from day 1 to 13
    path <- "/home/ilanre/Documents/Queue Research Work/"
    files <- list.files(path=path, pattern="*.csv")
    for(file in files)
    {
      perpos <- which(strsplit(file, "")[[1]]==".")
      assign(
      gsub(" ","",substr(file, 1, perpos-1)), 
      read.csv(paste(path,file,sep="")))
    }

Я хочу использовать функцию lappy (), чтобы найти сумму столбцов 2 и 5 для каждого дня и сохранить все в списке или фрейме данных
Спасибо

Метки

2 ответа

  1. Используя filesуже созданный объект, ниже будет создан список с суммой второго дня и суммой пятого столбца для каждого дня.

    list_of_sums <- lapply(files, function(file){
          df <- read.csv(file) 
          c( sum(df)[, 2]), sum(df)[, 5] )
        })
    
  2. Рассмотрим data.frame()внутриlapply, чтобы связать суммы двух столбцов:

    path <- "/home/ilanre/Documents/Queue Research Work/"
    files <- list.files(path=path, pattern="*.csv")
    
    dfList <- lapply(files, function(f){
         df <- read.csv(paste0(path, f))
         data.frame(SumOfInteraatime = sum(df$interaatime), SumOfActSerTime = sum(df$ActSerTime))
    })
    
    dfList <- setNames(dfList, gsub(".csv", "", files))