Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每个单元格具有多个匹配项的Vlookup的R版本_R_Match_Vlookup - Fatal编程技术网

每个单元格具有多个匹配项的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,然后重新组合。