字典样式替换多个项目我有一个大型的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 关注
- 599 浏览
添加回答
举报
0/150
提交
取消