У меня есть цикл, проходящий через каждый файл в каталоге. Он отлично работает с одним файлом, но как только в каталоге будет 2 или более файлов, второй (или более) вывод - все NA.
Я пытался перейти с read.csv на fread, я пытался конвертировать .csv в .txt, я пробовал разные методы выбора определенных столбцов (например, keep, select), но я всегда получаю NA для второй раз через цикл. Это не второй файл, потому что, если я удаляю первый файл, второй обрабатывается отлично.
Не уверен, что это что-то в конце .csv, или это добавляет имена строк во второй файл или что. Спасибо!
filenames <- list.files()
n_filenames <- length(filenames)
SSRT_cb1_pre <- data.frame(matrix(ncol = 4, nrow = n_filenames))
cols <- c(13, 23, 24, 25, 28, 29, 31, 32)
for (i in 1:n_filenames) {
print(filenames)
dt_pre <- fread(filenames[i], header=T, sep=",", select=cols,
stringsAsFactors=F, na.strings=c("NA", "", "."))
dt_pre$RT <- as.numeric(dt_pre$rt)
data_real_pre <- subset(dt_pre, SSTBlocks.thisRepN>=0)
data_corr_pre <- subset(data_real_pre, corr == 1)
data_corr_pre_RTmean <- aggregate(RT ~ P, data = data_corr_pre,
FUN=mean, na.rm=TRUE)
data_corr_pre_SSDmean <- aggregate(SSD ~ P, data = data_corr_pre,
FUN = mean, na.rm = TRUE)
pre_sub <- data_corr_pre_RTmean[i,1]
preMeanRT <- data_corr_pre_RTmean[i,2]
preMeanSSD <- data_corr_pre_SSDmean[i,2]
SSRT_cb1_pre[i, 1] <- i
SSRT_cb1_pre[i, 2] <- pre_sub
SSRT_cb1_pre[i, 3] <- preMeanRT
SSRT_cb1_pre[i, 4] <- preMeanSSD
}
SSRT_cb1_pre
Следующее дает мне этот вывод:
Выходы:
SSRT_cb1_pre
i sub1 preRT preSSD
1 1 301 0.4877872 0.2580645
2 2 NA NA NA
НОВЫЙ КОД, ЧЕМ О
filenames <- list.files()
n_filenames <- length(filenames)
n_rows <- n_filenames/2
SSRT_cb1_pre <- data.frame(matrix(ncol = 4, nrow = n_filenames)) # for output
colnames(SSRT_cb1_pre) <- c("i","sub1", "preRT", "preSSD")
cols <- c(13, 23, 24, 25, 28, 29, 31, 32)
colsnames <- c("SSTBlocks.thisRepN", "SSD", "corr", "rt", "sess", "CB", "P", "expName")
for (i in 1:n_filenames) {
print(filenames)
dt_pre <- fread(filenames[i], header=T, sep=",", select=colsnames, stringsAsFactors=F, na.strings=c("NA", "", "."))
dt_pre$RT <- as.numeric(dt_pre$rt)
data_real_pre <- subset(dt_pre, SSTBlocks.thisRepN>=0)
data_corr_pre <- subset(data_real_pre, corr == 1)
data_corr_pre_RTmean <- data_corr_pre[, mean(RT, na.rm=T), by = P] #suggested by Yannis Vassiliadis Stackoverflow as alt to aggregate
data_corr_pre_SSDmean <- data_corr_pre[, mean(SSD, na.rm=T), by = P]
# values to collect from each file
pre_sub <- data_corr_pre_RTmean[i, 1]
preMeanRT <- data_corr_pre_RTmean[i, 2]
preMeanSSD <- data_corr_pre_SSDmean[i, 2]
# output for values - should iterate through
SSRT_cb1_pre[i, 1] <- i
SSRT_cb1_pre[i, 2] <- pre_sub
SSRT_cb1_pre[i, 3] <- preMeanRT
SSRT_cb1_pre[i, 4] <- preMeanSSD
}
SSRT_cb1_pre
class(data_corr_pre_RTmean)
class(data_corr_pre_SSDmean)
Это дает выход:
[1] "301_1_PsychoPy_SST_Pretest_2.csv" "303_1_PsychoPy_SST_Pretest.csv"
[1] "301_1_PsychoPy_SST_Pretest_2.csv" "303_1_PsychoPy_SST_Pretest.csv"
Warning messages:
1: In as.numeric(dt_pre$rt) : NAs introduced by coercion
2: In as.numeric(dt_pre$rt) : NAs introduced by coercion
>
> SSRT_cb1_pre
i sub1 preRT preSSD
1 1 301 0.4877872 0.2580645
2 2 NA NA NA
> class(data_corr_pre_RTmean)
[1] "data.table" "data.frame"
> class(data_corr_pre_SSDmean)
[1] "data.table" "data.frame"