1

データ フレーム クラスではなく、データ テーブル クラスを使用する R コードを使用しています。

map.dt を map.df に変換することなく、R で次の操作を行うにはどうすればよいですか?

map.dt = data.table(chr = c("chr1","chr1","chr1","chr2"), ref = c(1,0,3200,3641), pat = c(1,3020,3022, 3642), mat = c(1,0,3021,0))
parent = "mat"
chrom = "chr1"
map.df<-as.data.frame(map.dt);
parent.block.starts<-map.df[map.df$chr == chrom & map.df[,parent] > 0,parent];

注: 親は動的に割り当てる必要があり、ユーザーからの入力です。この例では「mat」を選択しましたが、どの列でもかまいません。

注 1: parent.block.starts は整数のベクトルである必要があります。

注 2: map.dt は、列名が c("chr","re​​f","pat","mat") のデータ テーブルです。

問題は、データ テーブルでは特定の列に名前でアクセスできないか、少なくともその方法がわからないことです。

何か提案があれば教えてください!

ありがとう!

4

1 に答える 1

3

特にサンプル データがないと、ここでの最終目標が少し不明確ですが、キャラクター名で行にアクセスする場合は、次の 2 つの方法があります。

Columns = c("A", "B")
# .. means "look up one level"
dt[,..Columns]

dt[,get("A")]
dt[,list(get("A"), get("B"))]

しかし、この手法を頻繁に使用する必要がある場合は、おそらく使い方data.tableが不十分です。

編集

as.data.frame編集に基づいて、この行は変換を行わなくても同じ結果を返します。

> map.dt[chr==chrom & get(parent) > 0, get(parent)]
于 2013-09-20T14:52:31.930 に答える