1

私はこのデータフレーム構造を持っています

データ1:

  SNP   logp    Allele
rs2929  rs333003    4.46411719154375    T
rs3491  rs405831    4.46411719154375    G
rs1224  rs179639    4.44797917307381    A   

とData2はそれが同じであると想像します(Data1をテストするためだけに)

私がする時 :

f1=read.table(data1, header=TRUE ,as.is=TRUE)
f3=rbind(f1,f1)

私はこの結果を得る??:

  SNP   logp    Allele
rs2929  rs333003    4.46411719154375    T
rs3491  rs405831    4.46411719154375    G
rs1224  rs179639    4.44797917307381    A
rs29291 rs333003    4.46411719154375    T
rs34911 rs405831    4.46411719154375    G
rs12241 rs179639    4.44797917307381    A

ご覧のとおり、問題はrs2929を2回コピーする必要があることですが、代わりにrs29291になり、文字列内のすべての重複が+"1"であることに注意してください。それは間違っている!?どうすればいいですか:

  SNP   logp    Allele
rs2929  rs333003    4.46411719154375    T
rs3491  rs405831    4.46411719154375    G
rs1224  rs179639    4.44797917307381    A
rs2929  rs333003    4.46411719154375    T
rs3491  rs405831    4.46411719154375    G
rs1224  rs179639    4.44797917307381    A

それが本当の「マージ」なので、2つのファイルを結合したいと思います。値が重複しているため、これは奇妙に聞こえるかもしれませんが、それが発生した場合はそれが必要です。

4

4 に答える 4

2

差出人?read.table

row.names [...]

      If there is a header and the first row contains one fewer
      field than the number of columns, the first column in the
      input is used for the row names.  Otherwise if ‘row.names’ is
      missing, the rows are numbered.

したがって、あなたの場合、最初の列が行名として使用されます。Rでは行名が常に一意である必要がある1ため、重複を作成しようとするときに行名が追加されます。

1つの解決策は、ファイルの左上のセルに列名を追加するか、次のようにread.tableを呼び出すことですrow.names = NULL

f1 <- read.table(textConnection("

             SNP                logp    Allele
rs2929  rs333003    4.46411719154375         T
rs3491  rs405831    4.46411719154375         G
rs1224  rs179639    4.44797917307381         A   

"), header = TRUE, as.is = TRUE, row.names = NULL)

rbind(f1, f1)
#   row.names      SNP     logp Allele
# 1    rs2929 rs333003 4.464117      T
# 2    rs3491 rs405831 4.464117      G
# 3    rs1224 rs179639 4.447979      A
# 4    rs2929 rs333003 4.464117      T
# 5    rs3491 rs405831 4.464117      G
# 6    rs1224 rs179639 4.447979      A
于 2012-11-19T01:22:04.587 に答える
0

左端の文字列( "rs2929"など)は行名です。Rは、正当な理由から、オブジェクト内の名前が明確であることを望んでいるため、いくつかの名前を再割り当てしています。最も簡単な解決策は、おそらくこの情報を行名ではなく通常の列に格納することです。

f1$rs <- rownames(f1)
rownames(f1) <- NULL
f1new <- rbind(f1,f1)
于 2012-11-19T01:23:22.233 に答える
0

最初の列に列ラベルがないということは、それらがデータではなく行ラベルとして解釈されることを意味します。

これを参照してください:

 f1 <- structure(list(X = c("rs2929", "rs3491", "rs1224"), SNP = c("rs333003", 
   "rs405831", "rs179639"), logp = c(4.46411719154375, 4.46411719154375, 
   4.44797917307381), Allele = c("T", "G", "A")), .Names = c("X", 
   "SNP", "logp", "Allele"), class = "data.frame", row.names = c(NA, -3L))

 rbind(f1,f1)

Rは一意の行ラベルが好きです。

于 2012-11-19T01:24:28.047 に答える
0

だから私は私が必要としたこの関数を思いついた:

merge_gwas("final.txt","file1.txt","file2.txt")

merge_gwas<-function (out,a1,a2){
f1=read.table(a1,header=T,as.is=TRUE)
f2=read.table(a2,header=T,as.is=TRUE)
f3<- rbind(f1,f2)
write.table(f3, out,quote = FALSE, sep="\t", row.names = FALSE)
}

みんな、ありがとう

于 2012-11-19T22:44:34.343 に答える