我正在尝试在3个差异excel工作表(数据框架)中查找,以在合并数据框架中添加3个新列。
df
=我要在其中创建3个新列的合并数据框
df2
=我正在查找以获取df中的SheetName1列的数据帧(单列)(如果在df else中的任何5列中找到df2字符串,则应生成SheetName1列
df3
= ddata帧(单列),我在其中查找以获取df中的Segregation&segregationRef列(如果在df else中的任何5列中找到df3字符串,则应产生Segregation列,否则“ NA” segregationRef列如果在隔离列中找到了字符串,则结果应为“ NA”。我尝试了以下操作,但未获得最佳结果。
df <- data.frame(Section=c("sheet1", "sheet11", NA, "sheet15"),
Level =c("(Level 1)", "(Level 1)", "sheet1", "(Level 1)", NA),
SAC=c(NA, NA, "sheet5", NA),
Name=c(NA, "rohan", "vaibhav", "suresh"),
COLL MGR=c(NA, NA, NA, "suresh"))
df2 <- data.frame(sheetname=c("sheet1", "sheet2", "sheet3", "sheet4"))
df3 <- data.frame(segregation=c("john", "naren", "suresh", "rohan"))
df$Sheetname1 <- "NA"
for (j in 1:nrow(df2)) {
for (k in 1:nrow(df)) {
df$Sheetname1[k]=
ifelse(grepl(df2$Sheetname[j],
paste(df$`Level`[k], df$SAC[k]),
ignore.case=T),
df2$Sheetname[j], df$Sheetname1[k])
}
}
df$Segregation <- NA
for(l in 1:nrow(df3)){
for(m in 1:nrow(df)){
df$Segregation[m]=
ifelse(grepl(df3$Segregation[l],
paste(df$`Level`[m], df$Name[m],
df$COLL MGR[m],
df$`COLL MGR`[m],
df$`Collateral Manager`[m]),
ignore.case=T),
df3$Segregation[l],
df$Segregation[m])
}
}
答案 0 :(得分:0)
尝试一下。它应该工作。请注意,它只会返回找到的第一个匹配项。
df <- data.frame(Section = c("sheet1", "sheet11", NA, "sheet15"),
Level =c("(Level 1)", "(Level 1)", "sheet1", "(Level 1)"),
SAC = c(NA, NA, "sheet5", NA),
Name = c(NA, "rohan", "vaibhav", "suresh"),
`COLL MGR` = c(NA, NA, NA, "suresh") )
df2 = data.frame(sheetname = c("sheet1", "sheet2", "sheet3", "sheet4"));
df3 = data.frame(segregation = c("john", "naren", "suresh", "rohan"))
sheetname1<-apply(df,1,function(x){
if(any(x %in% df2$sheetname))
return(x[x %in% df2$sheetname][1])
else
return(NA_character_)
})
segregation<-apply(df,1,function(x){
if(any(x %in% df3$segregation))
return(x[x %in% df3$segregation][1])
else
return(NA_character_)
})
cbind(df,sheetname1,segregation)
#output:
# Section Level SAC Name COLL.MGR sheetname1 segregation
# 1 sheet1 (Level 1) <NA> <NA> <NA> sheet1 <NA>
# 2 sheet11 (Level 1) <NA> rohan <NA> <NA> rohan
# 3 <NA> sheet1 sheet5 vaibhav <NA> sheet1 <NA>
# 4 sheet15 (Level 1) <NA> suresh suresh <NA> suresh