1

これを尋ねる方法はわかりませんが、試してみます:

MS Accessからインポートした20個のdata.frame(2006_1、2006_2、2007_1、2007_2など)があります。

各data.frameには、10列と約300万行があります。

各data.frameの最初の列には、という名前が付けられsecuityNameています。これは、株式相場表示のリストであり、その後にいくつかのタグが続きます。

20個のdata.frameのすべての列のすべての行を大文字にしSecurityNameます。

構造は次のとおりです。

2006_1

> **SecurityName**   **...**
> AAPL abcdef        **...**
> MSFT abcdef        **...**

2006_2

> **SecurityName**   **...**
> AAPL abcdef        **...**
> MSFT abcdef        **...**

それぞれを次のように表示したいと思います。

2006_1

> **SecurityName**   **...**
> AAPL ABCDEF        **...**
> MSFT ABCDEF        **...**

すべてのdata.frame名を持つ*Raw_data_vector*という名前のベクトルがあります

Raw_data_vector

> 2006_1
> 2006_2
> 2007_1
> 2007_2
> ...

lapplyを使用しようとしましたが、機能しません。

lapply(1:length(Raw_data_vector), function(x) toupper(get(x)[,1]),Raw_data_vector)
4

1 に答える 1

1

これで始められるはずです。名前が始まる文字を使用data.framesしていたので、面白いビジネスに巻き込まれることはありません.

oh6_1 <- data.frame(SecurityName=letters[1:20], v=1:20)
oh6_2 <- oh6_1

out <- lapply(ls(pattern = 'oh[0-9]_*'), 
              function(x) {
                df <- get(x)
                df[, 1] <- toupper(df[, 1])  
                return(df)
              })

コメントによると:

data.frames の名前に応じて、pattern引数をに変更する必要がありますls。また、R は (ほとんどの場合) その場で変更するのではなく、新しいものを作成します。

何にも割り当てられていないため、コンソールへの出力として表示されます。代わりに のようなものを使用してout <- llply(ls(...)...)ください。次に、検査し outます。これは、追加の列を指定したデータ フレームのリストになります。Rでオブジェクトを検査できます?str

最後に、このオブジェクトのリストの概念は、多くの類似した (または同一の) ものを操作する場合の一般的な結果です。ここから、必要なプロセスを続行するのは簡単です。forfunction(data.frame)ループのようなものを呼び出す代わりに受け入れて、呼び出すことができます。lapply(list of data frames, function)

...確かに泥のように澄んでいます。

既存の data.frame に対して小文字の操作を行う必要がある場合は、常に怖いassign関数を使用できます。

myfun <- function(X) {
  df <- get(x)
  df[, 1] <- toupper(df[, 1])
  assign(x, df, .GlobalEnv)
  return(NULL)
}

lapply(ls(), myfun)

今あなたのdata.framesを見てください。

> oh6_1
   SecurityName  v
1             A  1
2             B  2
3             C  3
4             D  4
5             E  5
6             F  6
7             G  7
8             H  8
9             I  9
10            J 10
11            K 11
12            L 12
13            M 13
14            N 14
15            O 15
16            P 16
17            Q 17
18            R 18
19            S 19
20            T 20
> 
于 2012-06-19T15:32:52.210 に答える