每个单元格具有多个匹配项的Vlookup的R版本
我有一个带数字的向量和一个查找表。我想用查找表中的描述替换数字 当向量是直接向前的时,这很容易,例如:每个单元格具有多个匹配项的Vlookup的R版本,r,match,vlookup,R,Match,Vlookup,我有一个带数字的向量和一个查找表。我想用查找表中的描述替换数字 当向量是直接向前的时,这很容易,例如: > 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
> 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
感谢您的帮助
问候,,
Luc如评论中所述,实现预期产出需要几个步骤。下面将拆分变量,对description变量的结果编制索引,然后使用“粘贴”折叠多个元素
sapply(strsplit(variable, "\\^"), function(x) paste0(lookup$description[as.numeric(x)], collapse = "^"))
[1] "A" "B^C" "A^E" "D" "D"
如评论中所述,实现所需输出需要几个步骤。下面将拆分变量,对description变量的结果编制索引,然后使用“粘贴”折叠多个元素
sapply(strsplit(variable, "\\^"), function(x) paste0(lookup$description[as.numeric(x)], collapse = "^"))
[1] "A" "B^C" "A^E" "D" "D"
如果只有一个字符匹配和替换,则可以使用
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"
与
它也很有用,因为对于不匹配的字符,它不会更改或返回NA。如果只有一个字符匹配和替换,则可以使用
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"
与
它也很有用,因为对于不匹配的字符,它不会更改或返回
NA
。您可以使用scan
将文本解析为数字,然后将其用作索引,以拾取可折叠在一起的项目。Add 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"
您可以使用
scan
将文本解析为数字,然后将其用作索引来拾取可以折叠在一起的项目。Add 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"
您不需要简单的vlookup(在R/Python中通常作为“合并”或“连接”完成),因为您需要子字符串匹配。我建议您考虑将复杂的-
变量
条目拆分为单个条目,合并/加入/vlookup,然后重新组合。您不是在寻找一个简单的vlookup(在R/Python中通常作为“合并”或“加入”),因为您需要子字符串匹配。我建议您考虑将复杂的-变量
条目拆分为个体,合并/加入/vlookup,然后重新组合。