2

各 csv ファイル (合計ファイル = 40) から列 (または変数) を取得する必要がある状況があり、最終結果には同じ変数の 40 列を含むデータフレームが必要です。私はこのサイトを使用して自分のレベルを最大限に高めましたが、これまでに行ったことは次のとおりです。

$#*******************************************
theFiles <- list.files(pattern=glob2rx('*.csv'))
datafile<- lapply(theFiles,read.csv, header= T, sep = ",")

rain<- vector()
head(theFiles)
All<- for (i in 1:length(datafile)) {
  #do stuff here
  data_from_csv <- as.data.frame(datafile[i])
  rain <- list(rain, data_from_csv[,8]) 
# extract column no 8 from each file 
# if i use vector then its producing only one 
} 
#*****************************$

結果は list(list(list(...etc の値、構造、および名前であり、値を除いて必ずしも意味がありません。リストであり、変更できなかったので、ディメンションを確認できません。 40個のファイルがあるのに2つのリストしか表示されないため、データフレーム.したがって、すべての混乱を整理するようにお願いします.別の列に入る理由は、それらが別の場所からのものであるためです.

乾杯

4

5 に答える 5

5

パッケージread.csv.sqlから関数を試してください。sqldfcsv ファイルから特定の列を直接選択できます。

data <- read.csv.sql(theFile, sql="select col8 from file")
于 2013-05-01T15:12:48.543 に答える
2

これを試して:

rain<- list()

All <- for (i in 1:length(datafile)) {
  #do stuff here
  rain[[i]] <- datafile[[i]][,8]
# extract column no 8 from each file 
# if i use vector then its producing only one 
} 
于 2013-05-01T15:11:09.260 に答える
0

使用lapplyしてからループするのは、私には少し面倒です。1 つのループですべてを読み取る方が簡単です (そして同じくらい高速です)。

theFiles <- list.files(pattern=glob2rx('*.csv'))

rain <- list()
for (file in theFiles) {
    d <- read.csv(file, header = TRUE, sep = ",")
    rain[[i]] <- d[,8]
}

前述のように、ツールを使用して列 8 のみを読み取ることもできますが (例: sqldfLaF、またはを使用colbycol)、メモリ/速度の問題がある場合にのみそれを行います。

于 2013-05-01T15:21:53.377 に答える
0
theFiles <- list.files(pattern=glob2rx('*.csv'))

#read the files 
datafile<- lapply(theFiles,read.csv, header= T, sep = ",")
head(theFiles)
name<- data.frame(theFiles)
rowseq <- seq_len( max(vapply(datafile,nrow, integer(1))))
keylist <- lapply(datafile,function(x) { x[[8]][rowseq]  }) #row number 8
names(keylist) <- paste(name,theFiles,sep="_") # name the column by file names
Rainfall<- do.call(data.frame,keylist)

ただし、すべてのファイルに等しい番号が含まれていることが前提です。時系列の。シリーズの番号が等しくない場合は、シモンズコードを変更できます........

みんなありがとう……カンドゥ

于 2013-05-07T01:31:48.263 に答える