Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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
R-对照其他向量检查向量的元素_R_Loops_Indexing_Match - Fatal编程技术网

R-对照其他向量检查向量的元素

R-对照其他向量检查向量的元素,r,loops,indexing,match,R,Loops,Indexing,Match,我希望将一个数据帧中的列的元素与另一个数据帧相匹配 考虑以下数据帧: A=data.frame(par=c('long A story','long C story', 'blabla D'),val=1:3) B=data.frame(par=c('Z','D','A'),val=letters[1:3]) b柱的每一个元素“PAR”应与柱PAR相匹配。 如果存在匹配项,则应将其标记为a。 [然后给出一列用于合并a和B的公共值] 因此,期望的结果是: A=transform(A,label

我希望将一个数据帧中的列的元素与另一个数据帧相匹配

考虑以下数据帧:

A=data.frame(par=c('long A story','long C story', 'blabla D'),val=1:3) 
B=data.frame(par=c('Z','D','A'),val=letters[1:3])
b柱的每一个元素“PAR”应与柱PAR相匹配。 如果存在匹配项,则应将其标记为a。 [然后给出一列用于合并a和B的公共值]

因此,期望的结果是:

A=transform(A,label=c('A','NA','D'))
如何做到这一点


亨克

要按你的要求去做,试试看

A=data.frame(par=c('long A story','long C story', 'blabla D'),val=1:3) 
B=data.frame(par=c('Z','D','A'),val=letters[1:3])
A$label <- NA
for (x in B$par){
    is.match <- lapply(A$par,function(y) grep(x, y))
    A$label[which(is.match > 0)] <- x
}
A=data.frame(par=c('long A story','long c story','blablad'),val=1:3)
B=数据帧(par=c('Z','D','A'),val=字母[1:3])

$label要实现您的要求,请尝试

A=data.frame(par=c('long A story','long C story', 'blabla D'),val=1:3) 
B=data.frame(par=c('Z','D','A'),val=letters[1:3])
A$label <- NA
for (x in B$par){
    is.match <- lapply(A$par,function(y) grep(x, y))
    A$label[which(is.match > 0)] <- x
}
A=data.frame(par=c('long A story','long c story','blablad'),val=1:3)
B=数据帧(par=c('Z','D','A'),val=字母[1:3])

$labelHi您可以执行以下操作:

list <- lapply(1:length(B$par),function(x) grep(B$par[x],A$par))
list
[[1]]
integer(0)

[[2]]
[1] 3

[[3]]
[1] 1

label <- rep("NA",length(list))

B$par <-as.character(B$par)

label[unlist(list)] <- B$par[which(list != "integer(0)")]
label
[1] "A"  "NA" "D" 

A <- transform(A,label=label)
A
           par val label
1 long A story   1     A
2 long C story   2    NA
3     blabla D   3     D

listHi您可以这样做:

list <- lapply(1:length(B$par),function(x) grep(B$par[x],A$par))
list
[[1]]
integer(0)

[[2]]
[1] 3

[[3]]
[1] 1

label <- rep("NA",length(list))

B$par <-as.character(B$par)

label[unlist(list)] <- B$par[which(list != "integer(0)")]
label
[1] "A"  "NA" "D" 

A <- transform(A,label=label)
A
           par val label
1 long A story   1     A
2 long C story   2    NA
3     blabla D   3     D

list在一个方便的函数中没有循环:

findkey <- function(key,terms) {
  result <- sapply(as.character(key),function(x) grepl(x,terms))
  result <- apply(result,1,function(x) names(x)[x==TRUE])
  result[(lapply(result,length)==0)] <- NA

  return(unlist(result))
}

findkey在方便的函数中没有循环:

findkey <- function(key,terms) {
  result <- sapply(as.character(key),function(x) grepl(x,terms))
  result <- apply(result,1,function(x) names(x)[x==TRUE])
  result[(lapply(result,length)==0)] <- NA

  return(unlist(result))
}

findkey我想到的方法:

M <- lapply(strsplit(as.character(A$par), " "), function(x) x[x %in% B$par])
M[sapply(M, function(x) {identical(x, character(0))})] <- NA
A$label <- unlist(M)
A

           par val label
1 long A story   1     A
2 long C story   2  <NA>
3     blabla D   3     D

我想到的方法是:

M <- lapply(strsplit(as.character(A$par), " "), function(x) x[x %in% B$par])
M[sapply(M, function(x) {identical(x, character(0))})] <- NA
A$label <- unlist(M)
A

           par val label
1 long A story   1     A
2 long C story   2  <NA>
3     blabla D   3     D

最后一行应该是:
A=transform(A,label=c('A','NA','D'))
transform
调用中使用大写字母A吗?您想按顺序或存在性匹配吗?感谢您在LateMail中指出错误,A应该是transform调用中的A。如果B中的值存在于A中,然后B值必须加在A上。我不担心存在的顺序。它一定是grep的某种双循环,但我无法将其排序:-(最后一行应该是:
a=transform(a,label=c('a','NA','D'))
transform
调用中使用大写a?您想按顺序还是存在进行匹配?感谢您在最近的邮件中指出错误,a应该是transform调用中的a。如果B中的值存在于a中,则必须将B值添加到a中。我不担心存在的顺序。它必须是某种与grep的双循环,但我无法解决:-(我很敬畏,爱德华…作为奖励,我不必感到我最终会想到这个!我很敬畏,爱德华…作为奖励,我不必感到我最终会想到这个!