我有一个带有数字和查找表的向量。我希望数字替换为查找表中的描述。
当向量像下面的例子一样简单时,这很容易:
> variable <- sample(1:5, 10, replace=T)
> variable
[1] 5 4 5 3 2 3 2 3 5 2
>
> lookup <- data.frame(var = 1:5, description=LETTERS[1:5])
> lookup
var description
1 1 A
2 2 B
3 3 C
4 4 D
5 5 E
>
> with(lookup, description[match(variable, var)])
[1] E D E C B C B C E B
Levels: A B C D E
但是,当向量的单个元素包含多个结果时,我会遇到麻烦:
variable <- c("1", "2^3", "1^5", "4", "4")
我希望返回的向量为:
c("A", "B^C", "A^E", "D", "D")
任何帮助表示赞赏!
关于, 卢克
答案 0 :(得分:2)
如评论中所述,要获得所需的输出,需要执行几个步骤。以下内容将拆分变量,将结果与description变量建立索引,然后使用粘贴折叠多个元素。
sapply(strsplit(variable, "\\^"), function(x) paste0(lookup$description[as.numeric(x)], collapse = "^"))
[1] "A" "B^C" "A^E" "D" "D"
答案 1 :(得分:2)
如果只有一个字符匹配和替换,则可以使用chartr
chartr(paste0(lookup$var, collapse = ""),
paste0(lookup$description, collapse = ""), variable)
#[1] "A" "B^C" "A^E" "D" "D"
chartr
基本上告诉替换
paste0(lookup$var, collapse = "")
#[1] "12345"
与
paste0(lookup$description, collapse = "")
#[1] "ABCDE"
它也很有用,因为它不会更改或返回NA
用于不匹配的字符。
答案 2 :(得分:2)
您可以使用scan
将文本解析为数字,然后可以将其用作索引来选择可以折叠在一起的项目。添加quiet = TRUE可禁止显示“已读”消息。
sapply(variable, function(t) {
paste( lookup$description[ scan(text=t, sep="^")], collapse="^")} )
Read 1 item
Read 2 items
Read 2 items
Read 1 item
Read 1 item
1 2^3 1^5 4 4
"A" "B^C" "A^E" "D" "D"