13

2つのビッグデータフレームを取得しました。1つ(df1)はこの構造を持っています

   chr    init
1  12  25289552
2   3 180418785
3   3 180434779

他の(df2)はこれを持っています

    V1    V2     V3
10  1     69094 medium
11  1     69094 medium
12  12 25289552 high
13  1     69095 medium
14  3 180418785 medium
15  3 180434779 low

私がやろうとしているのは、の列を追加してV3df2突然変異df1の情報を取得することです

   chr    init  Mut
1  12  25289552 high
2   3 180418785 medium
3   3 180434779 low

両方をRにロードしてから、matchを使用してforループを実行しようとしていますが、機能しません。これを行うための特別な方法を知っていますか?私はawkまたは同様のものを使用して行うこともできます

4

5 に答える 5

17

使用するmerge

df1 <- read.table(text='  chr    init
1  12  25289552
2   3 180418785
3   3 180434779', header=TRUE)


df2 <- read.table(text='    V1    V2     V3
10  1     69094 medium
11  1     69094 medium
12  12 25289552 high
13  1     69095 medium
14  3 180418785 medium
15  3 180434779 low', header=TRUE)


merge(df1, df2, by.x='init', by.y='V2') # this works!
       init chr V1     V3
1  25289552  12 12   high
2 180418785   3  3 medium
3 180434779   3  3    low

目的の出力を表示する方法で取得するには

output <- merge(df1, df2, by.x='init', by.y='V2')[, c(2,1,4)]
colnames(output)[3] <- 'Mut' 
output
  chr      init    Mut
1  12  25289552   high
2   3 180418785 medium
3   3 180434779    low
于 2012-11-08T10:40:20.957 に答える
3
df1 <- read.table(textConnection("   chr    init
 1  12  25289552
 2   3 180418785
 3   3 180434779"), header=T)

df2 <- read.table(textConnection("    V1    V2     V3
 10  1     69094 medium
 11  1     69094 medium
 12  12 25289552 high
 13  1     69095 medium
 14  3 180418785 medium
 15  3 180434779 low"), header=T)

# You have to select the values of df2$V3 such as their corresponding V2 
# are equal to the values of df1$init
df1$Mut <- df2$V3[ df2$V2 %in% df1$init]

df1
  chr      init    Mut
1  12  25289552   high
2   3 180418785 medium
3   3 180434779    low
于 2012-11-08T10:40:34.873 に答える
0

する

df3 <- merge( df1, df2, by.x = "init", by.y = "V2" )
df3 <- df3[-3]
colnames( df3 )[3] <- "Mut"

あなたが欲しいものをあなたに与えますか?

于 2012-11-08T10:38:52.483 に答える