0
特定のディレクトリ内のすべてのファイルに次の機能を適用したいと考えています。次に、個々のファイルから処理されたデータを日時順の1つのマスターファイルに結合します。以下の関数は個々の個別のファイルを個別にクリーニングするのにはうまくいきますが、すべてをまとめて一度にマージしたいと思います。R関数を使用して個々のファイルを消去し、1つのマスターファイルに集約する
clean.data <- function(fpath){
require(magrittr)
require(dplyr)
df <- read.csv(fpath, skip = 30, header = FALSE, stringsAsFactors = FALSE) ## the raw data has an unecessary 30 line header
colnames(df) <- c("date","time","value")
df$datetime <-strptime(paste(df$date, df$time), "%m/%d/%Y %H:%M:%S", tz = "UTC")
df$datetime <- as.POSIXct(df$datetime, format = dt_format, tz = "UTC")
df <- df[,-c(1:2)] ## remove redundant columns
df <- df[,c(2:1)] ## reorder so date-time is the first column
df %>%
group_by(datetime = cut(datetime, breaks = "1 min")) %>%
summarize(value = mean(value))
}
ここでは、raw dataの例を示します。
これは私が私のデータは、ディレクトリ内のすべてのファイルをクリーニングし、マージした後でもする形式です:
datetime value
1 2017-03-02 16:25:00 1610
2 2017-03-02 16:26:00 862
3 2017-03-02 16:27:00 639
4 2017-03-02 16:28:00 563
5 2017-03-02 16:29:00 554
6 2017-03-02 16:30:00 558
私は、これが動作する必要があることを考えていますが、私はあまり持っていませんでした運がまだありません:
read.files <- function(fpaths, FUN, ...){
tbls <- lapply(fpaths, FUN, ...)
dta <- do.call(rbind, tbls)
return(dta)
}
read.files(fpaths, clean.data())
ありがとう、ありがとう!
ソリューション:
filenames <- list.files(path = ".", pattern = "\\.txt$", all.files = FALSE, full.names = TRUE)
library(plyr)
library(magrittr)
import.list <- ldply(filenames, clean.data) %>% plyr::arrange(import.list$datetime) ## make sure to specify using plyr instead of dplyr!
あなたのご意見ありがとうございます。 'full.names = TRUE'を変更すると、' list.files() '関数が正しく動作していました。 'ldply(filenames、clean.data)'も適切に動作していましたが、 '[order(datetime)]'は最初の行だけを含むデータフレームを出力します。代わりに、私は '%>%plyr :: arrange(import.list $ datetime)'を使いました。何らかの理由で 'plyr'だけがPOSIXct形式のdatetimesを順序付けることができるので、' dplyr :: arrange() 'の代わりに' plyr :: arange() 'を指定する必要があります。 – spacedSparking