R программирование для сегментации данных - PullRequest
0 голосов
/ 14 мая 2018

У меня есть данные от акселерометра с таблицей компонентов x, y, z.И в конкретном столбце я хочу выбрать сегменты данных только из этого столбца, используя код R.

Как этого добиться: допустим, в столбце есть эти числа

1, 2, 3, 0, 0, 0, 3, 4, 5, 1, 0, 0, 0, 2, 3, 0, 4, 5, 0, 0, 0

И я хочу, чтобы мой результат представлял собой подмножества, подобные этому

(1, 2, 3), (3, 4, 5, 1), (2, 3, 0, 4, 5)

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

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Если то, что у вас есть, является вектором, следующее сделает это.
Он использует rle, inverse.rle и стандартный трюк cumsum для разделения данных на нужные вам сегменты.

x <- c(1,2,3,0,0,0,3,4,5,1,0,0,0,2,3,0,4,5,0,0,0)

r <- rle(x == 0)
r$values[r$lengths < 3] <- FALSE
s <- split(x, cumsum(c(0, abs(diff(!inverse.rle(r))))))
s[!sapply(s, function(.s) length(.s) >= 3 && all(.s == 0))]
#$`0`
#[1] 1 2 3
#
#$`2`
#[1] 3 4 5 1
#
#$`4`
#[1] 2 3 0 4 5
0 голосов
/ 14 мая 2018

Я чувствую, что есть лучшие ответы, но между тем вы можете попробовать это:

# Simulating your data
column <- c(1, 2, 3, 0, 0, 0, 3, 4, 5, 1, 0, 0, 0, 2, 3, 0, 4, 5, 0, 0, 0)

# The actual answer
columnS <- paste(column, collapse="-") # Using - as vector token separator
columnS <- gsub("0-0-0", "=", columnS) # Using = as list token separator
fs <- strsplit(columnS, "=") # Creating the list
fs <- strsplit(fs[[1]], "-") # Creating the vectors of numbers inside each list
fs <- lapply(fs, function(x){return(as.numeric(x[x!=""]))}) # Casting to numeric
print(fs)

Надеюсь, это поможет

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