중첩 된 for 루프를 두 개의 중첩 된 foreach 루프로 변환하여 일치하는 전제 조건에 따라 데이터 프레임의 값을 변경하려고합니다. 내가 프로세스를 상당히 빠르게 할 수 있다고 믿는 이유.데이터 프레임의 값을 변경하는 중첩 된 foreach 루프 R
library(foreach) # for loop to parallelize
library(doMC) # create the number of cores to use
# set the number of cores to use
registerDoMC(22) # number of CPU cores
file_list <- c("a", "b", "c")
ldf <- c(data.frame(Date = c("2016-10-01", "2016-10-02", "2016-10-03", "2016-10-04")),
data.frame(Date = c("2016-10-07", "2016-10-08", "2016-10-09")),
data.frame(Date = c("2016-10-15", "2016-10-16", "2016-10-17", "2016-10-18", "2016-10-19")))
DF <- data.frame(Date = seq(as.POSIXct("2016-10-01", tz = "UTC"), as.POSIXct("2016-10-31", tz = "UTC"), by = 'day'),
A = 0,
B = 0,
C = 0)
DF2 <- DF # DF2 is used to compare my attempt result
for (i in 1:length(file_list))
{
Date <- ldf[[i]]
Date <- as.POSIXct(Date, tz = "UTC")
for (j in 1:length(Date))
{
ROW <- which(DF$Date == Date[j])
DF[ROW,i+1] <- 1
}
}
throwaway <- foreach (i = 1:length(file_list)) %dopar%
{
Date <- ldf[[i]]
Date <- as.POSIXct(Date, tz = "UTC")
foreach (j = 1:length(Date)) %do%
{
ROW <- which(DF2$Date == Date[j])
DF2[ROW,i+1] <- 1
return(NULL)
}
}
filelist
내가
ldf
읽을 수있는 파일을 저장하는 데 사용되는 변수입니다 : 다음은 내 코드의 예입니다 이 예제에서는 재현 가능한 예제 만 만들었습니다.
DF
는 내 시도 시도는하고
내가 찾고 있어요 출력 저장되는 위치를 foreach
에 의해 만들어진 값의 변화가
DF2
루프 저장 DF
의입니다려고하고있는 곳입니다 , DF2
은 변경되지 않습니다. foreach 루프는 반환 값을 위해 설계된 것으로 알고 있지만 반환 값을 데이터 프레임의 값을 변경해야하는 위치와 일치 시키려면 어떻게해야합니까? 이 값은 file_list
에있는 각 파일의 날짜가 데이터 프레임 DF2
의 날짜와 일치하는 곳입니다. 일치하는 경우 1은 행 (날짜) 및 열 (파일 이름)의 특정 위치에 배치됩니다. 어떤 도움을 주셔서 미리 감사드립니다!
원하는 출력은 다음과 같습니다
> DF
Date A B C
1 2016-10-01 1 0 0
2 2016-10-02 1 0 0
3 2016-10-03 1 0 0
4 2016-10-04 1 0 0
5 2016-10-05 0 0 0
6 2016-10-06 0 0 0
7 2016-10-07 0 1 0
8 2016-10-08 0 1 0
9 2016-10-09 0 1 0
10 2016-10-10 0 0 0
11 2016-10-11 0 0 0
12 2016-10-12 0 0 0
13 2016-10-13 0 0 0
14 2016-10-14 0 0 0
15 2016-10-15 0 0 1
16 2016-10-16 0 0 1
17 2016-10-17 0 0 1
18 2016-10-18 0 0 1
19 2016-10-19 0 0 1
20 2016-10-20 0 0 0
21 2016-10-21 0 0 0
22 2016-10-22 0 0 0
23 2016-10-23 0 0 0
24 2016-10-24 0 0 0
25 2016-10-25 0 0 0
26 2016-10-26 0 0 0
27 2016-10-27 0 0 0
28 2016-10-28 0 0 0
29 2016-10-29 0 0 0
30 2016-10-30 0 0 0
31 2016-10-31 0 0 0
당신이이 부분을 설명 할 수 없습니다 : 전부로는
all.equal
와 아래 원래 DF와 정확히 일치하는 결과를 보여? 어쩌면 원하는 결과의 예를들 수 있습니까? –물론! 필자가 찾고자하는이 값들은'file_list'에서 읽은 각 파일의 날짜가 데이터 프레임'DF2'의 날짜와 일치하는 곳입니다. 일치하는 경우 1은 행 (날짜) 및 열 (파일 이름)의 특정 위치에 배치됩니다. – lurodrig