字典樣式替換多個項目我有一個大型的data.frame字符數據,我想根據其他語言中通常稱為字典的內容進行轉換。目前我正在這樣做:foo <- data.frame(snp1 = c("AA", "AG", "AA", "AA"), snp2 = c("AA", "AT", "AG", "AA"), snp3 = c(NA, "GG", "GG", "GC"), stringsAsFactors=FALSE)foo <- replace(foo, foo == "AA", "0101")foo <- replace(foo, foo == "AC", "0102")foo <- replace(foo, foo == "AG", "0103")這樣可以正常工作,但是replace每次我想要替換data.frame中的一個項目時,重復該語句顯然不是很漂亮并且看起來很愚蠢。有沒有更好的方法來實現這一點,因為我有一個大約25個鍵/值對的字典?
3 回答

小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
map = setNames(c("0101", "0102", "0103"), c("AA", "AC", "AG"))foo[] <- map[unlist(foo)]
假設map
涵蓋了所有案例foo
。如果foo
是一個矩陣(字符()),這會感覺不像'黑客',在空間和時間上都更有效率,然后
matrix(map[foo], nrow=nrow(foo), dimnames=dimnames(foo))
當存在數百萬個SNP和數千個樣本時,矩陣和數據幀變體都與R 2的矢量大小限制相差2 ^ 31-1。

慕斯709654
TA貢獻1840條經驗 獲得超5個贊
如果您愿意使用包,那么它plyr
是一個非常受歡迎的包,并且具有這個方便的mapvalues()函數,可以滿足您的需求:
foo <- mapvalues(foo, from=c("AA", "AC", "AG"), to=c("0101", "0102", "0103"))
請注意,它適用于所有類型的數據類型,而不僅僅是字符串。

鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
這是一個快速的解決方案
dict = list(AA = '0101', AC = '0102', AG = '0103')foo2 = foofor (i in 1:3){foo2 <- replace(foo2, foo2 == names(dict[i]), dict[i])}
- 3 回答
- 0 關注
- 634 瀏覽
添加回答
舉報
0/150
提交
取消