2

2番目のデータセットに格納されているメタデータに基づいてデータセットから列を抽出する方法について誰かが提案していますか?比較的簡単な方法があるかどうか疑問に思っています(たとえば、「colnames」または「subset」を使用する)。私の元のデータセットは非常に大きく、100列以上と30,000行以上あります。ファイルを開いてExcelで選択するのは面倒です。

ここに2つのデータセットの例があります。

set1 <- data.frame(ID = rnorm(5, 5000, 1000), Sample1 = rnorm(5, 50000, 2500), 
Sample2 = rnorm(5, 50000, 2500), Sample3 = rnorm(5, 50000, 2500), 
Sample4 = rnorm(5, 50000, 2500), Sample5 = rnorm(5, 50000, 2500))

meta.data <- data.frame(Sample_name = c("Sample1", "Sample2", "Sample3", 
"Sample4", "Sample5"), Location = c("Loc1", "Loc2", "Loc3", "Loc1", "Loc1"), 
Time = c("M0", "M01", "M02", "M02", "M03"), 
Conc = c("lo", "hi", "lo", "lo", "lo"))

(1)ロケーションLoc1からのすべてのサンプルまたは時間M02からのすべてのサンプルを(新しいデータセットとして)抽出するにはどうすればよいですか?

(2)特定のID番号を持つ行を抽出し、その行内で濃度「lo」を持つサンプルのみを選択するにはどうすればよいですか?

4

2 に答える 2

2

set1これは、長いデータ形式に変換してからそれを結合することを含む1つのアプローチですmeta.data

library(reshape2)
set1.m <- melt(set1)
merge(set1.m, meta.data, by.x = "variable", by.y = "Sample_name", all = TRUE)
#-----
   variable     value Location Time Conc
1        ID  4168.153     <NA> <NA> <NA>
2        ID  5402.048     <NA> <NA> <NA>
..
..
29  Sample5 49668.695     Loc1  M03   lo
30  Sample5 52869.040     Loc1  M03   lo

IDカラムが溶けていたのかどうかわかりませんでした。meltそうでない場合は、呼び出しをに変更するだけですset1.m <- melt(set1, id.vars = "ID")

とにかく、この形式のデータは、subset()または[演算子を使用して直接サブセット化できます。

于 2012-07-15T00:55:55.903 に答える
1

これが最善の方法であるかどうかはわかりませんが、マージの方が適切である可能性がありますが、サブセット化を行う方法は次のとおりです。

(1)Location Loc1からすべてのサンプルを(新しいデータセットとして)抽出するにはどうすればよいですか...

#get a list of the samples all from Location Loc1
as.character(meta.data$Sample_name[meta.data$Location=="Loc1"])
#use this list of samples to subset the set1 data
set1[c("ID",as.character(meta.data$Sample_name[meta.data$Location=="Loc1"]))]

        ID  Sample1  Sample4  Sample5
1 3836.499 53304.29 47720.79 49504.96
2 4620.443 49406.93 49123.49 50419.93
3 5614.903 44413.93 50387.27 48652.29
4 6676.880 52732.63 48282.92 53544.17
5 3926.077 52593.59 50204.96 49563.13

(2)特定のID番号を持つ行を抽出し、その行内で濃度「lo」を持つサンプルのみを選択するにはどうすればよいですか?

例が乱数であるため、ここset1$ID[1]で選択したものの代わりに使用しました。ID次のようなものに置き換えるだけですset1$ID=="idnum1"

subset(set1,set1$ID==set1$ID[1])[c("ID",as.character(meta.data$Sample_name[meta.data$Conc=="lo"]))]

        ID  Sample1  Sample3  Sample4  Sample5
1 3836.499 53304.29 49706.58 47720.79 49504.96
于 2012-07-15T01:50:45.310 に答える