亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

字典樣式替換多個項目

字典樣式替換多個項目

揚帆大魚 2019-07-30 16:30:46
字典樣式替換多個項目我有一個大型的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。


查看完整回答
反對 回復 2019-07-30
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

如果您愿意使用包,那么它plyr是一個非常受歡迎的包,并且具有這個方便的mapvalues()函數,可以滿足您的需求:

foo <- mapvalues(foo, from=c("AA", "AC", "AG"), to=c("0101", "0102", "0103"))

請注意,它適用于所有類型的數據類型,而不僅僅是字符串。


查看完整回答
反對 回復 2019-07-30
?
鳳凰求蠱

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])}


查看完整回答
反對 回復 2019-07-30
  • 3 回答
  • 0 關注
  • 634 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號