2016-06-24 7 views
0

私はRを初めて使っていて、うまく動作するコードを書いたばかりです。私はこれを他の同じ41のdata.framesにも適用できるようにループしたいと思います。1つの固有のファイル名部分を別のものに置き換えてループするタスク

入力ファイルは "weatherdata .. + UNIQUE NUMBER"と呼ばれ、出力ファイルは "df + UNIQUE NUMBER"とします。

私が書いたコードは今weatherdata ..ファイルにのみ適用されます。。 CTRL + Fを押して5341をすべて置き換えて実行するのは簡単です。しかし、私はループのいくつかの並べ替えでこれを行うことができますか?または私にこれを行う方法を教えることができる素敵なチュートリアルがありますか?私はfor-loopでチュートリアルを見てきましたが、私のコードにどのように適用するのか分かりませんでした。
コードの一部が以下に記載されています。私は、ループが下のコードで動作するならば、それは残りのコードに対しても機能すると思います。すべての助けに感謝! :)

#List of part of the datafiles just 4 out of 42 files 
list.dat <- list(weatherdata..5341,weatherdata..5344, weatherdata..5347, 
       weatherdata..5350) 

# add colum with date(month) as a decimal number 
weatherdata..5341$Month <- format(as.Date(weatherdata..5341$Date) , "%m") 

# convert to date if not already 
weatherdata..5341$Date <- as.Date(weatherdata..5341$Date, "%d-%m-%Y") 

#Try rename columns 
colnames(weatherdata..5341)[colnames(weatherdata..5341)=="Max.Temperature"] <- "TMPMX" 

    # store as a vector 
v1 <- unlist(Tot1) 

    # store in outputfile dataframe 
Df5341<- as.data.frame.list(v1) 
+2

あなたの質問を向上させることができます。 Imhoの良いポストは、通常、最小限の入力データ、望ましい出力データ、再現可能なコードを提供します。すべてコピー&ペースト実行可能です。ポスターはバラストを捨てるべきです(ここでは99%?)。あなたの問題から抽象的に、あなたの元を最小限に抑えてください。完全な再現性を保持しながら、実際の問題に焦点を当て、目立つ質問があることを確認しながら、データセットとコードを作成します。ここでは、いくつかのファイル名の中のいくつかの文字を置き換えるように見えます。そのため、たとえばファイル名を使用していくつかのファイル名を指定します。 'dput(myfilenames [1:5])'と同様に、あなたがそれらを見せたいものを表示します。 – lukeA

答えて

0

あなたは、すべてのデータフレームのリストを作成し、それらの一つ一つをループしsapplyを使用することができます。以下にサンプルコードを示します。

> v1 <- list(data.frame(x = c(1,2), y = c('a', 'b')), data.frame(x = c(3,4), y = c('c', 'd'))) 
> v1 
[[1]] 
    x y 
1 1 a 
2 2 b 

[[2]] 
    x y 
1 3 c 
2 4 d 

> sapply(v1 , function(x){(x$x <- x$x/4)}) 
    [,1] [,2] 
[1,] 0.25 0.75 
[2,] 0.50 1.00 

次に、機能内のコンテンツを置き換えることができます。お役に立てれば。このような

+0

データフレームを自分の計算式に挿入する方法がわかりません。私は次のように試しましたが、エラーが発生しました: "予期せぬ"、時には "予期しないもの"を返します。 v1 < - list(data.frame(weatherdata..5341、weatherdata..5344、weatherdata..5347 、weatherdata..5350)) sapply(v1、function(x){(x $ Date)、(x $ Date)、 "%m")、(x $ Date < - as.Date x $ Date、 "%d-%m-%Y")}) –

0

何か作業をする必要があります:

## Assuming that your files are CSV files and are alone in the folder 

Fnames <- list.files() # this pulls the names of all the files 
         # in your working directory 
Data <- lapply(Fnames, read.csv) 
for(i in 1:length(Data)){ 
    # Put your code in here, replacing the Df names with Data[[i]] 
    # for example: 

    # add colum with date(month) as a decimal number 
    Data[[i]]$Month <- format(as.Date(Data[[i]]$Date) , "%m") 

    # convert to date if not already 
    Data[[i]]$Date <- as.Date(Data[[i]]$Date, "%d-%m-%Y") 

    #Try rename columns 
    colnames(Data[[i]])[colnames(Data[[i]])=="Max.Temperature"] <- "TMPMX" 

    # And so on.. 
} 
関連する問題