別のデータフレームとの一致に基づいてデータフレームに新しいブール列を作成すると、「置換にはx行、データにはy」というRエラーが発生します。

クラウディアダスト

私は次の2つのデータフレームを持っています(質問のために簡略化されています):

nsPre(小さいデータフレーム):

gene_id_name
ENSG00000005020|SKAP2
ENSG00000017260|ATP2C1
ENSG00000027869|SH2D2A
ENSG00000039319|ZFYVE16
.
.
.

g0(より大きなデータフレーム):

gene_id_name            pLI       g_eGenes_general
ENSG00000005020|SKAP2   0.00823   0
ENSG00000039319|ZFYVE16 0.12104   0
ENSG00000087884|AAMDC   0.13539   1
ENSG00000027869|SH2D2A  0.002489  1
ENSG00000124608|AARS2   0.32500   0
.
.
.

私がやろうとしているのは、次のように値が一致するときいつでも値を割り当て、一致しないときはのを割り当てる、g0calledg_eGenes_nsPre新しい列を作成することです。1gene_id_name0

望ましい結果:

gene_id_name            pLI      g_eGenes_general   g_eGenes_nsPre
ENSG00000005020|SKAP2   0.00823  0                  1
ENSG00000039319|ZFYVE16 0.12104  0                  1
ENSG00000087884|AAMDC   0.13539  1                  0
ENSG00000027869|SH2D2A  0.002489 1                  1
ENSG00000124608|AARS2   0.32500  0                  0

現在の試み:

df = g0
df <- na.omit(df)    
df$g_eGenes_nsPre <- ifelse(nsPre$gene_id_name %in% g0$gene_id_name, 1, 0)
df$g_eGenes_nsPost <- ifelse(nsPost$gene_id_name %in% g0$gene_id_name, 1, 0)

上記のコードを実行するとエラーが発生します:

Error in `$<-.data.frame`(`*tmp*`, g_eGenes_nsPre, value = c(1, 1, 1,  : 
  replacement has 2039 rows, data has 15430
Maurits Evers

ベースRで

transform(g0, g_eGenes_nsPre = apply(g0, 1, function(x)
    as.integer(x["gene_id_name"] %in% nsPre$gene_id_name)))
#             gene_id_name      pLI g_eGenes_general g_eGenes_nsPre
#1   ENSG00000005020|SKAP2 0.008230                0              1
#2 ENSG00000039319|ZFYVE16 0.121040                0              1
#3   ENSG00000087884|AAMDC 0.135390                1              0
#4  ENSG00000027869|SH2D2A 0.002489                1              1
#5   ENSG00000124608|AARS2 0.325000                0              0

Instradas.integerあなたも単項使用できる+演算子を。

またはを使用して dplyr

library(dplyr)
g0 %>%
    mutate(g_eGenes_nsPre = +(gene_id_name %in% nsPre$gene_id_name))
#             gene_id_name      pLI g_eGenes_general g_eGenes_nsPre
#1   ENSG00000005020|SKAP2 0.008230                0              1
#2 ENSG00000039319|ZFYVE16 0.121040                0              1
#3   ENSG00000087884|AAMDC 0.135390                1              0
#4  ENSG00000027869|SH2D2A 0.002489                1              1
#5   ENSG00000124608|AARS2 0.325000                0              0

またはを使用して data.table

library(data.table)
setDT(g0)[, g_eGenes_nsPre := +(gene_id_name %in% nsPre$gene_id_name)]

サンプルデータ

nsPre <- read.table(text =
    "gene_id_name
ENSG00000005020|SKAP2
ENSG00000017260|ATP2C1
ENSG00000027869|SH2D2A
ENSG00000039319|ZFYVE16", header = T)

g0 <- read.table(text =
    "gene_id_name            pLI       g_eGenes_general
ENSG00000005020|SKAP2   0.00823   0
ENSG00000039319|ZFYVE16 0.12104   0
ENSG00000087884|AAMDC   0.13539   1
ENSG00000027869|SH2D2A  0.002489  1
ENSG00000124608|AARS2   0.32500   0", header = T)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ