Как обнаружить и скомбинировать элементы вектора в R? - PullRequest
0 голосов
/ 28 мая 2020

У меня есть список данных, включающий множество элементов, из которых мне нужны только столбцы "interval..s" (продолжительность схватки) и "ActivityCode" (от 0 до 5), см. Рисунок ( datalist ). Я пытаюсь извлечь все 0 и 5 в столбце «ActivityCode» с их соответствующим значением из столбца «interval..s».
Я уже написал код для извлечения продолжительности схваток (из столбца «interval..s») ) с кодами активности 0 и 5, но продолжительность схваток следует суммировать, если 0 и 5 - это два последовательных боя

setwd("/Users/lucp9693/Desktop/csvfolder")
mydir = "csvfolder"
myfiles = list.files(path = mydir, pattern = ".csv",full.names = TRUE)
setwd("/Users/lucp9693/Desktop/csvfolder")
list.files(pattern = ".csv$")
list.filenames = list.files(pattern = ".csv$")
list.data = list()
ind = 0
result = vector("numeric",length(list.filenames))
for(i in 1:length(list.filenames))
{
  ind = ind +1
  list.data[[i]] = read.csv(list.filenames[i])
  document = read.csv(list.filenames[i],header = TRUE, sep = ",")
  W = document$Interval..s.[bestand$ActivityCode..0.sedentary.1.standing.2.stepping.2.1.cycling.3.1.primary.lying..3.2.secondary.lying.4.non.wear.5.travelling.==0]

Есть ли возможность это сделать? Спасибо!

1 Ответ

0 голосов
/ 29 мая 2020

Вот мое прочтение вашего вопроса (с некоторыми примерами данных):

library(dplyr)
library(tidyr)
library(tibble)

data <- tibble(
  Interval = round(runif(n = 100, min = 1, max = 1000), 1),
  ActivityCode = round(runif(n = 100, min = 0, max = 5),0)
)

data <- data %>%
  filter(ActivityCode == 0 | ActivityCode == 5) %>%
  mutate(sum = ifelse(ActivityCode == lag(ActivityCode, 1),Interval + lag(Interval, 1), Interval))

Я удаляю все строки, кроме тех, у которых ActivityCode равен 0 и 5. Если есть соседние или последовательные вхождения 0 или 5 суммируются два соседних интервала. С этим выводом:

> print.data.frame(data)
   Interval ActivityCode    sum
1      87.1            0     NA
2      38.7            0  125.8
3     843.1            5  843.1
4     680.6            5 1523.7
5     151.3            5  831.9
6      37.8            0   37.8
7     539.6            0  577.4
8     978.6            5  978.6
9     140.0            5 1118.6
10    145.1            5  285.1
11    252.5            0  252.5
12     90.0            0  342.5
13    588.8            5  588.8
14    459.1            0  459.1

Это было то, что вы искали?

...