1

質問データベースを調べましたが、答えが見つからなかったので、見落としがありましたら申し訳ありません。問題は非常に単純です。別の列 ID に基づいて新しいデータ フレームを作成するにはどうすればよいでしょうか。

これが元の df の場合:

structure(list(ID = structure(c(12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 13L, 13L, 13L, 
13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 
13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L), .Label = c("B0F", 
"B12T", "B1T", "B21T", "B22F", "B26T", "B2F", "B33F", "B3F", 
"B4F", "B7F", "P1", "P21", "P24", "P25", "P27", "P28", "P29"), class = "factor"), 
    EC = c(953L, 838L, 895L, 2170L, 2140L, 1499L, 2120L, 881L, 
    902L, 870L, 541L, 891L, 876L, 860L, 868L, 877L, 3630L, 3400L, 
    2470L, 2330L, 1810L, 2190L, 2810L, 2200L, 2440L, 1111L, 2460L, 
    2210L, 2340L, 1533L, 880L, 2475L, 2350L, 2440L, 1456L, 2320L, 
    2220L, 2990L, 2240L, 2210L, 2630L)), .Names = c("ID", "EC"
), row.names = 40:80, class = "data.frame")

ID に基づいて 2 つの新しい df を作成するにはどうすればよいですか? たとえば、B21T と P1 という名前の 2 つの新しい df を作成できますか? サブセットでできることはわかっていますが、ID が多いと時間がかかります。

だから私が探しているのは、サブセット関数を自動化する方法だと思います。

4

2 に答える 2

1

dfあなたのdata.frameであると考えてから、次のようにします:

df$ID <- droplevels(df$ID)  #  drop unused levels from `ID`
list2env(split(df, df$ID), envir=.GlobalEnv)
于 2013-10-21T12:53:39.913 に答える
0

必要なすべての異なるサブセットを and に入れてlist、そこから抽出できます。

#DF <- structure(list(ID = structure(c(12L ...

#all different "ID"s
ids <- as.character(unique(DF$ID))

#create empty list to insert all different subsets
myls <- vector("list", length(ids))

#insert the different subsets
for(i in 1:length(ids)) 
 { 
  myls[[i]] <- DF[DF$ID == ids[i],]
 }

names(myls) <- ids

必要なデータフレームにアクセスできます。

> myls$P21
    ID   EC
56 P21 3630
57 P21 3400
...

> myls$P1
   ID   EC
40 P1  953
41 P1  838
...

ただし、非常に多くの「ID」がある場合、これには時間がかかる場合があります。

編集ループ よりも優れてforいるのはジルバーの答えです。ここでは として使用しsplit(DF, DF$ID, drop = T)ます。

于 2013-10-21T10:18:05.723 に答える