データフレームのリストをループしてRに列名を設定するにはどうすればよいですか?

user86907

データフレームの膨大なリストがあり、最初の列と4番目の行の条件に従って列名を設定したいと思います。以下の私のサンプルデータを見つけてください:

sample_data<-data.frame(a= c("\"\"","This","Week","1","2",  "3",   "4",  "5", "6" ),b=c("\"\""      , "Last"   ,   "Week"  , "(1)"    ,       "(2)"   ,       "(3)"     ,       "(4)"     ,           "(5)"   ,      "(6)"   ) ,c=c("\"\"" , "End","2008"  , "<1>",   "<2>",  "<3>", "<4>", "<5>", "<6>"  ) ,
                            d=c(""   ,    "Name"   ,   "" ,      "Tiger Woods" ,  "Sergio Garcia" ,"Phil Mickelson" ,"Padraig Harrington", "Vijay Singh" ,"Robert Karlsson") ,e=c("", "Country" ,  "",       "United States" ,"Spain",         "United States" , "Ireland" ,           "Fiji" , "Sweden"     ),
                            f=c("" ,  "Average" ,  "Points" ,"11.664"    ,    "7.992"    ,     "6.871"  ,        "6.832"   ,           "6.631"   ,    "5.017"  ),f=c("", "Total" ,"Points","466.573" ,"415.591" ,"336.674", "348.431",  "358.071", "265.906" ))



another_data<-data.frame(a=c("\"\"","Last", "Week" ,"\"\"","(50)", "(55)","(51)","(52)"),b=c("\"\"" ,"End", "2011","\"\"", "<148>","<70>","<49>","<51>"),c=c("","Name", "\"\"" ,"" ,"Kyle Stanley" , "Kevin Na" ,"Gonzalo Fdez-Castano" ,"Ryo Ishikawa") ,
                              d=c("","State","\"\"","\"\"", "United States","United States" ,"Spain" ,"Japan"),e=c("\"\"" ,"Country" ,"\"\"","\"\"","United States", "United States" ,"Spain","Japan"),f=c("\"\"","Average" ,"Points" ,"","2.694" ,"2.560","2.544" ,"2.539")) 
     
               
list_df<-list(sample_data,another_data)


list_df
[[1]]
     a    b    c                  d             e       f     f.1
1   ""   ""   ""                                                 
2 This Last  End               Name       Country Average   Total
3 Week Week 2008                                   Points  Points
4    1  (1)  <1>        Tiger Woods United States  11.664 466.573
5    2  (2)  <2>      Sergio Garcia         Spain   7.992 415.591
6    3  (3)  <3>     Phil Mickelson United States   6.871 336.674
7    4  (4)  <4> Padraig Harrington       Ireland   6.832 348.431
8    5  (5)  <5>        Vijay Singh          Fiji   6.631 358.071
9    6  (6)  <6>    Robert Karlsson        Sweden   5.017 265.906

[[2]]
     a     b                    c             d             e       f
1   ""    ""                                               ""      ""
2 Last   End                 Name         State       Country Average
3 Week  2011                   ""            ""            ""  Points
4   ""    ""                                 ""            ""        
5 (50) <148>         Kyle Stanley United States United States   2.694
6 (55)  <70>             Kevin Na United States United States   2.560
7 (51)  <49> Gonzalo Fdez-Castano         Spain         Spain   2.544
8 (52)  <51>         Ryo Ishikawa         Japan         Japan   2.539

だから私がしたいのは、4番目の行にが含まれているかどうかを確認することです""その場合、データフレームの4行目から1行目までのすべてをマージします。一方、4番目の行にが含まれていない場合""は、データフレームの3番目の行から最初の行までのすべてをマージします。

これが私の試練です:

for (index in 1:length(list_df))
{

  if(list_df[[index]][4,1]=="")
    {
      list_df[[index]]<-setNames(as.data.frame(list_df[[index]][-(1:4), ]),
                                                sapply(as.data.frame(list_df[[index]][1:4, ]), paste, collapse = ""))
    }
  else if(list_df[[index]][4,1]!="")
  {
    list_df[[index]]<-setNames(as.data.frame(list_df[[index]][-(1:3), ]),
                                sapply(as.data.frame(list_df[[index]][1:3, ]), paste, collapse = ""))
  }
  {
    return(list_df)
  }

}

しかし、これは私に望ましい出力を与えていません。最初の条件でのみ機能しますが、2番目の条件は考慮しません。

これが私が得ている出力です:

list_df

   [[1]]
      ThisWeek LastWeek End2008               Name       Country AveragePoints TotalPoints
    4        1      (1)     <1>        Tiger Woods United States        11.664     466.573
    5        2      (2)     <2>      Sergio Garcia         Spain         7.992     415.591
    6        3      (3)     <3>     Phil Mickelson United States         6.871     336.674
    7        4      (4)     <4> Padraig Harrington       Ireland         6.832     348.431
    8        5      (5)     <5>        Vijay Singh          Fiji         6.631     358.071
    9        6      (6)     <6>    Robert Karlsson        Sweden         5.017     265.906
    
    [[2]]
         a     b                    c             d             e       f
    1                                                                    
    2 Last   End                 Name       Country       Country Average
    3 Week  2011                                                   Points
    4                                                                    
    5 (50) <148>         Kyle Stanley United States United States   2.694
    6 (55)  <70>             Kevin Na United States United States   2.560
    7 (51)  <49> Gonzalo Fdez-Castano         Spain         Spain   2.544
    8 (52)  <51>         Ryo Ishikawa         Japan         Japan   2.539

ただし、必要な出力は次のとおりです。

list_df

[[1]]
          ThisWeek LastWeek End2008               Name       Country AveragePoints TotalPoints
        4        1      (1)     <1>        Tiger Woods United States        11.664     466.573
        5        2      (2)     <2>      Sergio Garcia         Spain         7.992     415.591
        6        3      (3)     <3>     Phil Mickelson United States         6.871     336.674
        7        4      (4)     <4> Padraig Harrington       Ireland         6.832     348.431
        8        5      (5)     <5>        Vijay Singh          Fiji         6.631     358.071
        9        6      (6)     <6>    Robert Karlsson        Sweden         5.017     265.906

[[2]]
   LastWeek   End2011         Name                  State        Country  AveragePoints
5    (50)     <148>         Kyle Stanley           United States United States   2.694
6    (55)      <70>         Kevin Na               United States United States   2.560
7    (51)      <49>         Gonzalo Fdez-Castano   Spain         Spain           2.544
8    (52)      <51>         Ryo Ishikawa           Japan         Japan           2.539

私はこれにとても困惑しています。なぜ条件の1つが無視されているのかわかりません。誰かがこれを手伝ってくれませんか?

ロナックシャー

通常、lapply。を使用してリストを反復処理するのは簡単です。あなたが試すことができます :

lapply(list_df, function(x) {
  if (x[4, 1] == '""') {
    names(x) = gsub('"', '', trimws(sapply(x[1:4, ], paste, collapse = "")))
    x[-c(1:4), ]
  }
  else {
    names(x) = gsub('"', '', trimws(sapply(x[1:3, ], paste, collapse = "")))
    x[-c(1:3), ]
  }
})

#[[1]]
#  ThisWeek LastWeek End2008               Name       Country AveragePoints TotalPoints
#4        1      (1)     <1>        Tiger Woods United States        11.664     466.573
#5        2      (2)     <2>      Sergio Garcia         Spain         7.992     415.591
#6        3      (3)     <3>     Phil Mickelson United States         6.871     336.674
#7        4      (4)     <4> Padraig Harrington       Ireland         6.832     348.431
#8        5      (5)     <5>        Vijay Singh          Fiji         6.631     358.071
#9        6      (6)     <6>    Robert Karlsson        Sweden         5.017     265.906

#[[2]]
#  LastWeek End2011                 Name         State       Country AveragePoints
#5     (50)   <148>         Kyle Stanley United States United States         2.694
#6     (55)    <70>             Kevin Na United States United States         2.560
#7     (51)    <49> Gonzalo Fdez-Castano         Spain         Spain         2.544
#8     (52)    <51>         Ryo Ishikawa         Japan         Japan         2.539

あなたの限りforループが関係しているあなたは間違った文字を探しているので、それが動作していない主な理由です。の値は空の文字列[4, 1]""なくです(Check another_data[4, 1] == ''vs another_data[4, 1] == '""')。これを変更すると、目的の出力が得られるはずです。ただし、forループにいくつかの追加の変更を加えました

  • else if不要なため、追加の条件を削除しました
  • gsub列名から引用符を削除するために私の答えのように追加されました
  • return(list_df)すでにlist_dfインforループを変更しているので意味がないので削除しました。
for (index in 1:length(list_df)) {
  if(list_df[[index]][4,1] == '""') {
    list_df[[index]]<-setNames(as.data.frame(list_df[[index]][-(1:4), ]),
                    gsub('"', '',sapply(as.data.frame(list_df[[index]][1:4, ]), 
                 paste, collapse = "")))
  }
  else{
    list_df[[index]]<-setNames(as.data.frame(list_df[[index]][-(1:3), ]),
                  gsub('"', '', sapply(as.data.frame(list_df[[index]][1:3, ]), 
                  paste, collapse = "")))
  }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Rで、文字列名を指定してリストのデータフレーム列を変更するにはどうすればよいですか

分類Dev

Pysparkのデータフレームの条件に基づいて新しいリスト値を設定するにはどうすればよいですか?

分類Dev

Rのループによって生成されたデータフレームのリストを作成するにはどうすればよいですか?

分類Dev

データフレームのリストの列として行名を設定するにはどうすればよいですか?

分類Dev

テンプレートのデフォルトパラメータとしてstd :: vectorを設定するにはどうすればよいですか?

分類Dev

列名に基づいてデータフレームのリストを分割するにはどうすればよいですか?

分類Dev

リスト内のすべてのデータフレームの列名を変更するにはどうすればよいですか?

分類Dev

Rのデータフレームの文字列ベクトルを介してforループを実行するにはどうすればよいですか?

分類Dev

スクリプトでデフォルトのタイムゾーンを設定するにはどうすればよいですか?

分類Dev

スクリプトでデフォルトのタイムゾーンを設定するにはどうすればよいですか?

分類Dev

Rマトリックスの列名を失うことなく、RDataとして保存されたRからパンダデータフレームにマトリックスをインポートするにはどうすればよいですか?

分類Dev

コンボボックスを介してJavaでフレームのタイトルを設定するにはどうすればよいですか?

分類Dev

Rデータフレームの列をループして、各反復で列名を使用して新しいデータフレームを作成するにはどうすればよいですか?

分類Dev

セルの新しい値をパンダデータフレーム(Python)のfloatとして設定するにはどうすればよいですか?データフレームは、ネストされたforループにあるときに整数に丸められます

分類Dev

Rでpaste0()を使用してデータフレームのリストに列を追加するにはどうすればよいですか?

分類Dev

Rのデータフレームに列名の「/」を付けるにはどうすればよいですか?

分類Dev

リストに基づいて特定のデータフレームをループし、Rを使用してそれらすべてをrbind関数に追加するにはどうすればよいですか?

分類Dev

パンダデータフレームのサブセットのスタイルを設定するにはどうすればよいですか?

分類Dev

データフレームの列で複数の「numpy.isclose」値をループしてテストするにはどうすればよいですか?

分類Dev

R:データフレームをリストに追加するにはどうすればよいですか?

分類Dev

依存選択リストのデフォルト値/プレースホルダーを設定するにはどうすればよいですか?

分類Dev

一連の列名を使用して、pandasデータフレームからシリーズを取得するにはどうすればよいですか?

分類Dev

新しいGoogleマップでデフォルトのズームレベルを設定するにはどうすればよいですか?

分類Dev

altairでカスタムカラーテーマをデフォルトとして設定するにはどうすればよいですか?

分類Dev

Rのループを使用してデータフレームを一意の名前に保存するにはどうすればよいですか?

分類Dev

パンダのデータフレームにリサンプリングの特定の条件を設定するにはどうすればよいですか?

分類Dev

スター引数のデフォルトを設定するにはどうすればよいですか?

分類Dev

Rのリストにマップする列をデータフレームに作成するにはどうすればよいですか?

分類Dev

Rのデータフレーム内のリストの値をフィルタリングするにはどうすればよいですか?

Related 関連記事

  1. 1

    Rで、文字列名を指定してリストのデータフレーム列を変更するにはどうすればよいですか

  2. 2

    Pysparkのデータフレームの条件に基づいて新しいリスト値を設定するにはどうすればよいですか?

  3. 3

    Rのループによって生成されたデータフレームのリストを作成するにはどうすればよいですか?

  4. 4

    データフレームのリストの列として行名を設定するにはどうすればよいですか?

  5. 5

    テンプレートのデフォルトパラメータとしてstd :: vectorを設定するにはどうすればよいですか?

  6. 6

    列名に基づいてデータフレームのリストを分割するにはどうすればよいですか?

  7. 7

    リスト内のすべてのデータフレームの列名を変更するにはどうすればよいですか?

  8. 8

    Rのデータフレームの文字列ベクトルを介してforループを実行するにはどうすればよいですか?

  9. 9

    スクリプトでデフォルトのタイムゾーンを設定するにはどうすればよいですか?

  10. 10

    スクリプトでデフォルトのタイムゾーンを設定するにはどうすればよいですか?

  11. 11

    Rマトリックスの列名を失うことなく、RDataとして保存されたRからパンダデータフレームにマトリックスをインポートするにはどうすればよいですか?

  12. 12

    コンボボックスを介してJavaでフレームのタイトルを設定するにはどうすればよいですか?

  13. 13

    Rデータフレームの列をループして、各反復で列名を使用して新しいデータフレームを作成するにはどうすればよいですか?

  14. 14

    セルの新しい値をパンダデータフレーム(Python)のfloatとして設定するにはどうすればよいですか?データフレームは、ネストされたforループにあるときに整数に丸められます

  15. 15

    Rでpaste0()を使用してデータフレームのリストに列を追加するにはどうすればよいですか?

  16. 16

    Rのデータフレームに列名の「/」を付けるにはどうすればよいですか?

  17. 17

    リストに基づいて特定のデータフレームをループし、Rを使用してそれらすべてをrbind関数に追加するにはどうすればよいですか?

  18. 18

    パンダデータフレームのサブセットのスタイルを設定するにはどうすればよいですか?

  19. 19

    データフレームの列で複数の「numpy.isclose」値をループしてテストするにはどうすればよいですか?

  20. 20

    R:データフレームをリストに追加するにはどうすればよいですか?

  21. 21

    依存選択リストのデフォルト値/プレースホルダーを設定するにはどうすればよいですか?

  22. 22

    一連の列名を使用して、pandasデータフレームからシリーズを取得するにはどうすればよいですか?

  23. 23

    新しいGoogleマップでデフォルトのズームレベルを設定するにはどうすればよいですか?

  24. 24

    altairでカスタムカラーテーマをデフォルトとして設定するにはどうすればよいですか?

  25. 25

    Rのループを使用してデータフレームを一意の名前に保存するにはどうすればよいですか?

  26. 26

    パンダのデータフレームにリサンプリングの特定の条件を設定するにはどうすればよいですか?

  27. 27

    スター引数のデフォルトを設定するにはどうすればよいですか?

  28. 28

    Rのリストにマップする列をデータフレームに作成するにはどうすればよいですか?

  29. 29

    Rのデータフレーム内のリストの値をフィルタリングするにはどうすればよいですか?

ホットタグ

アーカイブ