3

たくさんの通貨データ.csvファイルを使用しています。これらの.csvには、colnames関数を使用して追加しようとしているヘッダーがありません。

colnames(variable_name) <- c('Date', 'Time', 'Open', 'Close', 'Volume')

データのインポートと列ヘッダーの割り当ては、forループを使用して自動的に行われることになっています。データフレームの名前はファイル名の一部です。

file_names <- list.files()

for (i in 1:length(file_names)){
    assign(substr(file_names,1,6)[i], read.csv(file_names[i], header=F))
    colnames(variable_name) <- c('Date', 'Time', 'Open', 'Close', 'Volume')
}

variable_nameをcolnames関数に入力するにはどうすればよいですか。私は使ってみました:

colnames(substr(file_names,1,6)[i])

ただし、「AUDUSD」と入力すると、引用符なしでAUDUSDを入力する必要があります。

では、どうすれば文字列をここで使用できる変数名に変換できますか?それとも、私のアプローチはここで完全に間違っていますか?

どうもありがとう!

クリス

4

3 に答える 3

8

You were looking for get. Your code would look like this:

file_names  <- list.files()
short_names <- substr(file_names, 1, 6)

for (i in seq_along(file_names)) {
    assign(short_names[i], read.csv(file_names[i], header = FALSE))
    colnames(get(short_names[i])) <- c('Date', 'Time', 'Open', 'Close', 'Volume')
}

but it seems easier to use the col.names option from the read.* functions, try:

assign(short_names[i], read.csv(file_names[i], header = FALSE,
                                col.names = c('Date', 'Time', 'Open',
                                              'Close', 'Volume'))

and if you are not familiar with the *apply family of functions, your whole loop can be replaced with:

mapply(assign, short_names, lapply(file_names, read.csv, header = FALSE,
                                   col.names = c('Date', 'Time', 'Open',
                                                 'Close', 'Volume'))
于 2013-02-23T14:04:33.960 に答える
3

リストを使用することをお勧めします。そうすれば、物事は素晴らしくきれいになります。

file_names <- list.files()

data <- lapply (file_names, read.csv, header = FALSE)
names (data) <- substr(file_names, 1, 6)  # now you can access data$AUDUSD

## colnames for all data.frames
data <- lapply (data, `colnames<-`, c('Date', 'Time', 'Open', 'Close', 'Volume'))

さらに簡単:

data <- lapply (file_names, read.csv, header = FALSE, 
                col.names = c ('Date', 'Time', 'Open', 'Close', 'Volume'))
names (data) <- substr (file_names, 1, 6)  # now you can access data$AUDUSD

(個人的には、これらすべての data.frames を 1 つにまとめて、追加の列を追加します$conversion)

ただし、もちろん、すべての data.frame を独自の変数に含めることができます。その場合、get少し注意が必要です。

> colnames (get (variable_name)) <- c('Date', 'Time', 'Open', 'Close', 'Volume')
error: "target of assignment expands to non-language object")  

(エラーメッセージは逆翻訳です)

ただし、これは機能します。

    tmp <- get (variable_name) # in your case, rather do: tmp <- read.csv (...)
    colnames (tmp) <- letters [1:2]
    assign (variable_name, tmp)

colnames<-(とにかく、最初の割り当ての前に置きます)

于 2013-02-23T14:18:09.577 に答える