0

一連の CSV ファイルを R にロードしました。ロードしたデータから 2 番目の列を抽出し、新しい変数を作成する方法について質問があります。Rには、抽出行をこの新しい変数に「追加」できる関数があるかどうか知りたいと思います。私の現在のコードは、最後の変数から 2 番目の列のみを保持します。このような基本的な操作を求めて申し訳ありません。

以下は私のRコードです:

filenames=dir() #Scan file names
 for (i in filenames){
  adt = substr(x = i, start = 1, stop = nchar(i)-4)
  name=paste("data_", adt, sep="")
  tmp <- read.csv(i, header=TRUE, sep=",")
  assign(name, tmp, pos=.GlobalEnv)  #save all the imported CSV content
  FB_d <- data.frame(cbind(tmp[,2]))  # I would like add the second column to a new variable, and I failed here...
}

提案をありがとう。

アップデート

を試しFB_d <- cbind(FB_d,tmp2[,1])ましたが、見つかりませんでしたのでエラーになりました'FB_d'

4

2 に答える 2

2

私はこのようなものを選ぶでしょう:

write.csv(mtcars[1:5,],file = "~/Desktop/folder/file1.csv")
write.csv(mtcars[6:10,],file = "~/Desktop/folder/file2.csv")

setwd("~/Desktop/folder")

f <- list.files("~/Desktop/folder")

dat <- lapply(f,read.csv)
names(dat) <- paste0("data_",substr(f,1,nchar(f)-4))

do.call(cbind,lapply(dat,'[[',2))

つまり、可能な限りベクトル化とリスト構造を使用します。また、私は(当分の間)assignあなたの語彙を追放します。これは、特定の状況での非常に特殊な使用のための高度な機能であり、「通常の」目的で一般的に使用されるべきではありません。

cbindまた、多数の(大きな)列を作成するとかなり速く遅くなるという警告を追加する必要があります。この問題の解決策は、最初にデータ構造を初期化(事前割り当て)してから、それに割り当てることです。

于 2012-09-17T03:14:44.263 に答える
0

特に効率的ではないにしても、この方法を使用して csv をロードするのが好きです。

fileList = list.files(path='path/to/files', pattern='xxxx.csv') 
FB_d <- vector()
dat<-lapply(fileList,read.csv,header=T,sep = "\t") #and then 
for(i in 1:length(dat)) {
  #do stuff here
  data_from_csv <- as.data.frame(dat[i])

  ##EDIT--adding to vector for each loop
  FB_d <- append(FB_d, data_from_csv[,2])

}
于 2012-09-17T02:26:04.903 に答える