2016-07-15 24 views
0

関連するエントリを調べたにもかかわらず問題を解決できませんでした。私は、それぞれが2つの列(変数)を持つ多くのデータフレームのリストを持っています。各データフレームの2番目の列の名前を、そのデータフレームが属するデータフレームの名前(拡張子 ".csv"を除く)に変更します。具体的に私は、変数がである場合、オブジェクトの名前の変数の名前を交換する必要があります。オブジェクト名を使用してリストに格納されたデータフレームの変数の名前を変更します。

ので、例えば、私は3つのデータフレーム

List of 3 
$ Conc.csv1: Classes 'data.table' and 'data.frame': 83 obs of 2 variables. 
     .. $ Type: chr [1:83] "FAMILY" ... 
     .. $ Process: int [1:83] 2304 ... NA NA 

    $ Ambs.csv2: Classes 'data.table' and 'data.frame': 78 obs. of 2 variables: 
    .. $ Type: chr [1:78] "CIVIL AND COMMERCIAL" ... 
    .. $ Process: int [1:78] NA 2 ... 

    $ Sec.csv3: Classes 'data.table' and 'data.frame': 117 obs. of 2 variables: 
    .. $ Type: chr [1: 117] "Action"  
    .. $ Process: int [1: 117] NA NA 110 ... 

のリストを持って、私は同じリストを必要とするが、変数の名前を変更しますデータフレーム

の名前を持つすべてのデータフレームにおける「プロセス」だから、出力は次のようになります。

List of 3 
$ Conc.csv1: Classes 'data.table' and 'data.frame': 83 obs of 2 variables. 
    .. $ Type: chr [1:83] "FAMILY" ... 
    .. $ Conc: int [1:83] 2304 ... NA NA 

    $ Ambs.csv2: Classes 'data.table' and 'data.frame': 78 obs of 2 variables. 
    .. $ Type: chr [1:78] "CIVIL AND COMMERCIAL" ... 
    .. $ Ambs: int [1:78] NA 2 ... 

    $ Sec.csv3: Classes 'data.table' and 'data.frame' 117 obs of 2 variables. 
    .. $ Type: chr [1: 117] "Action"  
    .. $ Sec: int [1: 117] NA NA 110 ... 

答えて

0
> library("purrr") 

> l <- list(Conc.csv1 = data.frame(Type = 1:5, Process = 1:5), 
      Ambs.csv1 = data.frame(Type = 6:10, Process = 1:5), 
      Sec.csv1 = data.frame(Type = 11:15, Process = 1:5)) 
> str(l) 
List of 3 
$ Conc.csv1:'data.frame': 5 obs. of 2 variables: 
    ..$ Type : int [1:5] 1 2 3 4 5 
    ..$ Process: int [1:5] 1 2 3 4 5 
$ Ambs.csv1:'data.frame': 5 obs. of 2 variables: 
    ..$ Type : int [1:5] 6 7 8 9 10 
    ..$ Process: int [1:5] 1 2 3 4 5 
$ Sec.csv1 :'data.frame': 5 obs. of 2 variables: 
    ..$ Type : int [1:5] 11 12 13 14 15 
    ..$ Process: int [1:5] 1 2 3 4 5 

> l_names <- as.list(gsub("\\.csv1$", "",names(l))) 
> l_df <- map2(.x = l, .y = l_names, .f = ~ {colnames(.x)[2] <- .y; return(.x)}) 

> str(l_df) 
List of 3 
$ Conc.csv1:'data.frame': 5 obs. of 2 variables: 
    ..$ Type: int [1:5] 1 2 3 4 5 
    ..$ Conc: int [1:5] 1 2 3 4 5 
$ Ambs.csv1:'data.frame': 5 obs. of 2 variables: 
    ..$ Type: int [1:5] 6 7 8 9 10 
    ..$ Ambs: int [1:5] 1 2 3 4 5 
$ Sec.csv1 :'data.frame': 5 obs. of 2 variables: 
    ..$ Type: int [1:5] 11 12 13 14 15 
    ..$ Sec : int [1:5] 1 2 3 4 5 
+0

ご協力いただきありがとうございます。うまく動作し、問題が解決しました。 –

0

はこれを行うには多くの方法は確かにありますが、次のようにもlapplyを使用することができ

l <- list(Conc.csv1 = data.frame(Type = NA, Process = NA), 
      Ambs.csv1 = data.frame(Type = NA, Process = NA), 
      Sec.csv1 = data.frame(Type = NA, Process = NA)) 

for (df in seq_along(l)) { 
    colnames(l[[df]])[2] <- gsub("\\.csv\\d", "", names(l)[df]) 
} 

str(l) 
#List of 3 
# $ Conc.csv1:'data.frame': 1 obs. of 2 variables: 
# ..$ Type: logi NA 
# ..$ Conc: logi NA 
# $ Ambs.csv1:'data.frame': 1 obs. of 2 variables: 
# ..$ Type: logi NA 
# ..$ Ambs: logi NA 
# $ Sec.csv1 :'data.frame': 1 obs. of 2 variables: 
# ..$ Type: logi NA 
# ..$ Sec : logi NA 
+0

ありがとうございました。ループは完全に機能します。 –

0

:私は古き良きforループを選択しました。

newNames <- gsub("\\..*", "", names(l)) 
l <- lapply(seq_along(newNames), 
      setNames(l[[i]], c(names(l[[i]])[1], newNames[i]))) 

これは、名前が変更されたdata.framesでリストを返します。

+0

ご協力いただきありがとうございます。 deループは動作しますが、lapplyは何か間違っている必要があります。コード "lasNames [i]"のlas部分にエラーメッセージが表示されます。再度、感謝します。 –

+0

ありがとうございます。私はカッコを間違えてしまいました。私はそれを動かしたのでうまくいくはずです。 – lmo

関連する問題