У меня есть несколько наборов данных ("001.csv", "002.csv" и т. Д. До 332), хранящихся в одной папке со следующей структурой (пример):
id p1 p2
2 35.0 na
2 5.00 2.05
2 0.35 1.56
2 na 0.79
2 5.23 0.13
2 5.01 0.03
Мне нужно создать функцию, которая будет считывать один или несколько файлов и возвращать мне количество случаев, когда и «p1», и «p2» имеют заданное значение (то есть нет NA), для которого я написал это :
cc <- function(directory, id=1:332) {
files_list <- list.files(directory, full.names = TRUE)
for (i in id) {
dat <- read.csv(files_list[i])
}
nobs <- length(which(!is.na(dat$p1) & !is.na(dat$p2)))
completecases <- data.frame(id, nobs)
completecases
}
Это прекрасно работает, если я выберу одно значение для "id"; в этом случае результат будет примерно таким:
> cc(directory, 1)
id nobs
1 3
Но, если я хочу узнать количество наблюдений в более чем одном файле, он возвращает мне, для каждого «id», количество наблюдений для наибольшего значения «id». Например,
> cc(directory, 1:2)
id nobs
1 4
2 4
вместо:
> cc(directory, 1:2)
id nobs
1 3
2 4
Я считаю, что мне нужно подмножество моих данных "id" или использовать "rbind" для каждого "id", но мне пока не удалось получить правильную формулу.
Кто-нибудь знает как это исправить?