如何将原始输入转换为R中的索引值

时间:2015-05-29 06:35:21

标签: r dictionary text-mining

先谢谢你的帮助。 我有一个原始输入文件" foo.txt"和另一个dictionary文件" dic.csv",其中dic文件中的每一行都是key-value对,键是一个字符,值是另一个字符。

也许是这样, foo.txt

abcd
dcba
aaaa

dic.csv

a 1
b 2
c 3
d 4

我想转换" foo.txt"根据匹配的密钥在dic文件中的值,以便结果:

1234
4321
1111

有没有有效的方法来做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:4)

尝试

chartr(paste(d1$Col1, collapse=''), paste(d1$Col2, collapse=""), v1)
#[1] "1234" "4321" "1111"

或者我们可以使用paste

进行循环,而不是使用两个sapply
v2 <- sapply(d1, paste, collapse='')
chartr(v2[1], v2[2], v1)
#[1] "1234" "4321" "1111"

或使用mgsub

中的qdap
library(qdap)
mgsub(d1$Col1, d1$Col2, v1)
#[1] "1234" "4321" "1111"

或者

library(gsubfn)
gsubfn('[abcd]', list(a=1, b=2, c=3, d=4), v1)
#[1] "1234" "4321" "1111"

数据

 v1 <- c('abcd', 'dcba', 'aaaa')
 d1 <- data.frame(Col1= letters[1:4], Col2=1:4, stringsAsFactors=FALSE)

答案 1 :(得分:2)

您可以将字典data.frame转换为命名向量,然后使用索引:

foo <- c("abcd", "dcba", "aaaa")
dict <- data.frame(key = letters[1:4], value = 1:4)
dict.vec <- setNames(dict$value, dict$key)

sapply(foo, function(x) 
    paste(dict.vec[strsplit(x, "")[[1]]], collapse = ""))
#   abcd   dcba   aaaa 
# "1234" "4321" "1111"