Найти, является ли последнее число в каждом списке четным или нечетным в R - PullRequest
0 голосов
/ 25 июня 2018

Как я могу узнать, является ли окончательное число в списке четным или нечетным, а затем поместить эту строку в кадр данных.

У меня есть несколько файлов CSV, которые заканчиваются либо нечетными, либо четными «числами кругов».(то есть # 17 и 26 ниже)

Total time  10:00.61
Lap times
01      00:07.46
02      00:05.64
03      00:01.07
04      00:01.04
05      00:04.71
06      00:06.43
07      00:12.52
08      00:07.34
09      00:05.46
10      00:05.81
11      00:05.52
12      00:06.51
13      00:10.75
14      00:00.83
15      00:03.64
16      00:02.75
17      00:01.20

и это ...

Total time  10:00.61
Lap times
01      00:07.46
02      00:05.64
03      00:01.07
04      00:01.04
05      00:04.71
06      00:06.43
07      00:12.52
08      00:07.34
09      00:05.46
10      00:05.81
11      00:05.52
12      00:06.51
13      00:10.75
14      00:00.83
15      00:03.64
16      00:02.75
17      00:01.20
18      00:06.17
19      00:04.40
20      00:00.75
21      00:00.84
22      00:01.29
23      00:02.31
24      00:03.04
25      00:02.85
26      00:05.86

Я использую этот цикл для просмотра файлов CSV

output = lapply(files, function(x) {
  dat = read.csv(x, header= TRUE) 
  dat = dat[-c(1),]
  dat = as.data.frame(dat)
  dat = separate(data = dat, col = dat, into = c("lap", "duration"), sep = 
  "\\      ")
})

затем результат будет выглядеть так:

[[1]]
     lap duration
1     01 00:07.46
2     02 00:05.64
3     03 00:01.07
4     04 00:01.04
5     05 00:04.71
6     06 00:06.43
7     07 00:12.52
8     08 00:07.34
9     09 00:05.46
10    10 00:05.81
11    11 00:05.52
12    12 00:06.51
13    13 00:10.75
14    14 00:00.83
15    15 00:03.64
16    16 00:02.75
17    17 00:01.20


[[2]]
    lap duration
1    01 00:07.46
2    02 00:05.64
3    03 00:01.07
4    04 00:01.04
5    05 00:04.71
6    06 00:06.43
7    07 00:12.52
8    08 00:07.34
9    09 00:05.46
10   10 00:05.81
11   11 00:05.52
12   12 00:06.51
13   13 00:10.75
14   14 00:00.83
15   15 00:03.64
16   16 00:02.75
17   17 00:01.20
18   18 00:06.17
19   19 00:04.40
20   20 00:00.75
21   21 00:00.84
22   22 00:01.29
23   23 00:02.31
24   24 00:03.04
25   25 00:02.85
26   26 00:05.86

Как я могу увидеть, четна или нечетна последняя строка (т.е. строки 17 и 26 соответственно)?Тогда я, возможно, захочу взять эти последние строки и поместить их в отдельный фрейм данных.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Не проверял, но это может дать вам несколько советов.Просто сделал несколько изменений в вашем коде:

output = lapply(files, function(x) {
  dat = read.csv(x, header= TRUE)
  last_row = nrow(dat)

  # to see if even or odd number
  ifelse(last_row %% 2==0, 'this is even','this is odd')

  # insert last row into a new data frame
  last_row_values = unlist(dat[last_row,])
  dat = as.data.frame(last_row_values)
  colnames(dat) <- c('lap','duration')
  return (dat)
})

Я думаю, поскольку output будет списком, позже вам, возможно, потребуется сделать:

df = do.call('rbind', output)
0 голосов
/ 25 июня 2018

Прежде всего, вы можете значительно упростить процедуру чтения.

output <- lapply(files, read.csv, skip = 1)

Теперь, что касается нечетного / четного количества строк.

n <- sapply(output, nrow)
ifelse(n %% 2 == 0, "even", "odd")

Обратите внимание, чтовместо значений символов "even" и "odd" вы можете ifelse вернуть что угодно на ваш выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...