2012-07-11 94 views
0

樣本數據:與列一個數據幀匹配行中的第二

t1 <- data.frame(
    CName=c("334","5as4","ggg","bbb"), 
    D1=c(1," ",3,1), 
    D2=c(3,4,5,5) 
) 

t2 <- data.frame(
    PName=c("zz","yy","xx","ww"), 
    `334`=c(5,6,3,5), 
    "ggg"=c(7,5,4,3), 
    `5as4`=c(9,9,1,1), 
    check.names=FALSE 
) 

生產:

t1 
    CName D1 D2 
1 334 1 3 
2 5as4  4 
3 ggg 3 5 
4 bbb 1 5 

t2 
    PName 334 ggg 5as4 
1 zz 5 7 9 
2 yy 6 5 9 
3 xx 3 4 1 
4 ww 5 3 1 

欲列t1$CName列匹配的t2列標題。

所需的輸出是:

PName 334 ggg 5as4 
    D1 1 3  
    D2 3 5 4 
1 zz 5 7 9 
2 yy 6 5 9 
3 xx 3 4 1 
4 ww 5 3 1 
+0

爲什麼你認爲記憶是一個問題嗎?你會得到什麼錯誤?你的數據幀有多大? – Andrie 2012-07-11 06:25:18

+0

@Andrie,我的數據集大小約爲1000,因爲我的電腦速度很慢,我擔心內存是個問題。如果根據你的經驗,這不是問題。你能介意教我如何做到這一點?我想我可以使用早些時候由Gsee提出的方法(http://stackoverflow.com/questions/11424232)。但我不知道如何修改它,以便根據匹配結果添加新行。你能介意幫我一把嗎? – psiu 2012-07-11 06:59:37

+0

我有**完全**重寫你的問題似乎有道理,併發布了一個答案,即使在舊機器上R應該很容易應付。 – Andrie 2012-07-11 07:37:01

回答

1

在我看來,你真的想與t2合併的t1轉置:

第1步:創建表t1的轉置副本:

tt1 <- as.data.frame(t(t1[, -1]), stringsAsFactors=FALSE) 
names(tt1) <- t1[, 1] 
tt1$PName = rownames(tt1) 

tt1 
    334 5as4 ggg bbb PName 
D1 1  3 1 D1 
D2 3 4 5 5 D2 

步驟2:合併

merge(tt1, t2, all=TRUE, sort=FALSE) 

    334 5as4 ggg PName bbb 
1 1  3 D1 1 
2 3 4 5 D2 5 
3 5 9 7 zz <NA> 
4 6 9 5 yy <NA> 
5 3 1 4 xx <NA> 
6 5 1 3 ww <NA> 

第3步:現在,所有你需要做的就是刪除不需要的列。

334 5as4 ggg PName 
1 1  3 D1 
2 3 4 5 D2 
3 5 9 7 zz 
4 6 9 5 yy 
5 3 1 4 xx 
6 5 1 3 ww 

即使是1000個條目的您所陳述的數據大小這不應該是一個問題R.

+0

非常感謝。分析運行速度非常快。 – psiu 2012-07-11 09:37:48

相關問題