모든 두 번째 열이 특정 시간에 해당하고, 각 기간에 각각 '매수'및 '매도'위치가 있으며, 이러한 각 위치에는 두 가지 요소가 있습니다 (아래 참조). 그러나 열의 길이가 같지 않으므로 '판매'옵션은 다른 행에서 시작합니다 (값 사이에 묻혀 있음).
time, time1, time, time2, time, time3
buy, , buy, , buy,
factor1, 1, factor1, 2, factor1, 3
factor2, 4, factor2, 5, factor2, 6
factor1, 7, factor1, 8, factor1, 9
factor2, 10, factor2, 11, factor2, 12
factor1, 13, sell, , factor1, 14
factor2, 15, factor1, 16, factor2, 17
sell, , factor2, 18, factor1, 19
factor1, 20, , , factor2, 21,
factor2, 22, , , sell,
, , , , factor1, 23
, , , , factor2, 24
, , , , factor1, 25
, , , , factor2, 26
궁극적으로 아래와 같은 구조의 테이블을 원합니다.
time, position, factor, value
time1, buy, factor1, 1
time1, buy, factor2, 4
time1, buy, factor1, 7
time1, buy, factor2, 10
time1, buy, factor1, 13
time1, buy, factor2, 15
time1, sell, factor1, 20
time1, sell, factor2, 22
time2, buy, factor1, 2
time2, buy, factor2, 5
time2, buy, factor1, 8
time2, buy, factor2, 11
time2, sell, factor1, 16
time2, sell, factor2, 18
time3, buy, factor1, 3
time3, buy, factor2, 6
time3, buy, factor1, 9
time3, buy, factor2, 12
time3, buy, factor1, 14
time3, buy, factor2, 17
time3, buy, factor1, 19
time3, buy, factor2, 21
time3, sell, factor1, 23
time3, sell, factor2, 24
time3, sell, factor1, 25
time3, sell, factor2, 26
인덱스를 추출한 다음 R에서 각각 '구매'및 '판매'목록을 만들 수 있습니다.하지만 이것이 가장 쉬운 방법인지 확실하지 않습니다 (이러한 파일이 많고 빠른 자동 방법을 선호합니다). 나는 또한 R이 아닌 Python으로 변환하는 데 열려 있습니다.
# For each column find the index of buy, sell (and the corresponding empty cell)
idx = apply(data, 2, function(x) which(x %in% c("buy","sell",""))[1:3] )
# NA indicates that the empty cell is the last
idx[is.na(idx)] = nrow(data)
i = 0
buy = list( apply(idx, 2, function(x) {
i <<- i+1
data[seq(x[1]+1,x[2]),i]
}) )
i = 0
sell = list( apply(idx, 2, function(x) {
i <<- i+1
data[seq(x[2]+1,x[3]),i]
}) )
나는 하나의 긴 형식 데이터 세트에서 2 열의 3 세트를 먼저 결합하기로 결정했습니다. 그런 다음 이월 된 마지막 알려진 값 ( tidyr::fill
)으로 위치 열을 채우고 열 값을 필터링하여 쓰레기를 필터링합니다.
다음은 작업 예입니다.
library(dplyr)
library(tidyr)
str <- "
time, time1, time, time2, time, time3
buy, , buy, , buy,
factor1, 1, factor1, 2, factor1, 3
factor2, 4, factor2, 5, factor2, 6
factor1, 7, factor1, 8, factor1, 9
factor2, 10, factor2, 11, factor2, 12
factor1, 13, sell, , factor1, 14
factor2, 15, factor1, 16, factor2, 17
sell, , factor2, 18, factor1, 19
factor1, 20, , , factor2, 21,
factor2, 22, , , sell,
, , , , factor1, 23
, , , , factor2, 24
, , , , factor1, 25
, , , , factor2, 26
"
strfile <- textConnection(str)
raw <- read.table(strfile, header = F, sep = ",", stringsAsFactors = F)
library(dplyr)
library(tidyr)
dt <- do.call(rbind, lapply(1:3, function(x) {
p <- raw[,c(x*2-1,x*2)]
names(p) <- c('factor', 'value')
p$time <- x
p
})
)
dt %>%
mutate(position = if_else(trimws(factor) %in% c('buy','sell'),as.character(factor),as.character(NA)),
value = as.numeric(value)) %>%
fill(position) %>% filter(!is.na(value))
결과:
factor value time position
1 factor1 1 1 buy
2 factor2 4 1 buy
3 factor1 7 1 buy
4 factor2 10 1 buy
5 factor1 13 1 buy
6 factor2 15 1 buy
7 factor1 20 1 sell
8 factor2 22 1 sell
9 factor1 2 2 buy
10 factor2 5 2 buy
11 factor1 8 2 buy
12 factor2 11 2 buy
13 factor1 16 2 sell
14 factor2 18 2 sell
15 factor1 3 3 buy
16 factor2 6 3 buy
17 factor1 9 3 buy
18 factor2 12 3 buy
19 factor1 14 3 buy
20 factor2 17 3 buy
21 factor1 19 3 buy
22 factor2 21 3 buy
23 factor1 23 3 sell
24 factor2 24 3 sell
25 factor1 25 3 sell
26 factor2 26 3 sell
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다