複数のセットがある場合でも、@Sachaの答えで十分だと思います。
元の投稿でデータを「グループ化」する方法を明示的に指定しておらず、2番目のデータセットを追加したコメントで、これらを最初に「マージ」する予定があるかどうかを明示的に指定していません(rbind
コメントで推奨されているように、十分です)。
それで、ここにいくつかのオプションがあり、それぞれが出力の詳細または有用性のレベルが異なります。うまくいけば、それらの1つがあなたのニーズに合っています。
まず、サンプルデータをいくつか示します。
# Two data.frames (myData1, and myData2)
set.seed(1)
myData1 <- data.frame(id = 1:20,
name = paste("a", 1:20, sep = ""),
marks = sample(20:100, 20, replace = TRUE),
gender = sample(c("F", "M"), 20, replace = TRUE))
myData2 <- data.frame(id = 1:17,
name = paste("b", 1:17, sep = ""),
marks = sample(30:100, 17, replace = TRUE),
gender = sample(c("F", "M"), 17, replace = TRUE))
第二に、「グループ化」のためのさまざまなオプション。
オプション1 :与えられた条件からの値とそれに一致する値を(aでlist
)返します。この例では、2つのリストが作成されます。myData1
myData2
data.frame
lapply(list(myData1 = myData1, myData2 = myData2),
function(x) x[x$marks >= 30 & x$marks <= 50, ])
オプション2list
:各データセットを2つに分割して返します。1つはFALSE
(指定された条件に一致しません)、もう1つはTRUE
(指定された条件に一致します)です。つまり、4つのグループを作成します。この例では、それぞれ2つのリストアイテムを持つネストされたリストになりますdata.frame
。
lapply(list(myData1 = myData1, myData2 = myData2),
function(x) split(x, x$marks >= 30 & x$marks <= 50))
オプション3:最初のものよりも柔軟性があります。これは基本的に、@Sachaの例をリストに拡張したものです。どこにでも休憩を入れることができるので、私の考えでは、これは本当に便利なオプションです。この例では、それぞれが複数のリストを持つ2つのリストアイテムを持つネストされたリストになりますdata.frame
。
lapply(list(myData1 = myData1, myData2 = myData2),
function(x) split(x, cut(x$marks,
breaks = c(0, 30, 50, 75, 100),
include.lowest = TRUE)))
オプション4:最初にデータを結合し、オプション1で説明したグループ化方法を使用します。この例ではdata.frame
、指定された条件に一致する値のみを含む単一のデータになります。
# Combine the data. Assumes all the rownames are the same in both sets
myDataALL <- rbind(myData1, myData2)
# Extract just the group of scores you're interested in
myDataALL[myDataALL$marks >= 30 & myDataALL$marks <= 50, ]
オプション5:結合されたデータを使用してsplit
、データを2つのグループに分けます。1つは指定された条件に一致し、もう1つは一致しません。この例では、2つdata.frame
のsを持つリストが作成されます。
split(myDataALL, myDataALL$marks >= 30 & myDataALL$marks <= 50)
これらのオプションの1つがあなたのニーズに役立つことを願っています!