1

for ループを使用して複数のデータ フレームを作成し、新しいデータ フレームごとに列を追加して他のデータ フレームを削除したいと考えています。元のデータセットは次のようになります。

Site  Count1  Count2  Count3  Count4  Count5  Count6  Count7  Count8  Count9  Habitat
  1     0       0       0       0       1       0        2       0       1     Forest
  2     1       2       3       0       0       2        0       1       0     Field
  3     2       0       0       1       1       1        0       2       0     Field

基本的に、カウント列ごとに新しいデータ フレームを作成したいので、ここでは次のような 9 つの新しいデータ フレームを作成します。

df.1:

Site TotCount Habitat
  1     0       Forest
  2     1       Field
  3     2       Field

df.2:

Site TotCount Habitat
  1     0       Forest
  2     2       Field
  3     0       Field

等々。

これにより、必要なフレームが作成されます。

for (z in 1:9){       
  assign(paste("df",z,sep="."),orig_data)
}

2 番目のステップがわかりません。適切な数を、生息地の列 (および上に表示されていないその他の列) と共に新しい各データ フレームに入れます。9 カウントを超える可能性があるため、この自動化を維持したいと考えています。

4

2 に答える 2

4

これにより、9 つの data.frames のリストが作成されます。これは、(私を信じて) グローバル環境に 9 つの変数を作成するよりもはるかに優れています。

data.list <- lapply(1:9, function(i) {
  setNames(data[c("Site", paste0("Count", i), "Habitat")],
           c("Site", "TotCount", "Habitat"))
})

の代わりにdf.1、 を実行して最初の data.frame にアクセスできますdata.list[[1]]。また、関数をすべての data.frames (つまりループ) に適用する場合は、lapplyまたはを参照してくださいsapply

于 2013-10-28T22:04:28.030 に答える
0

これにより、df.xオブジェクトがグローバル環境に配置されます。

# example data
df <- data.frame(Site = 1:3, 
                 Count1 = 0:2, 
                 Count2 = c(0,2,0), 
                 Count3 = c(0,3,0), 
                 Habitat = c("Forest", "Field", "Field") 
                 )

作業を行う関数:

countSplit_2df <- function(DF){
    CountCols <- grep("Count", names(DF))
    HabCol <- grep("Habitat", names(DF))
    for (z in CountCols) {
        assign(paste("df", z, sep="."), 
               rbind(df[,c(1, z, HabCol)]),
               envir = .GlobalEnv)
    }
}

今それを適用します:

countSplit_2df(df)

そしてls()、あなたは見るでしょう

> ls()
[1] "countSplit_2df" "df"             "df.2"           "df.3"          
[5] "df.4" 

の列番号を使用して名前を付けたので、これはあなたが求めたとおりではないことに注意してくださいgrep

答えを完成させるには、誰かが「カウント」の後のテキストを選択する正しい方法を取得する必要があります。それを使用して、オブジェクトgrepにラベルを付けます。df.x私はそれを働かせることができませんでした。

于 2013-10-28T22:16:37.290 に答える