목록간에 변수 이름이 동일한 경우에만 2 개 목록의 값을 일치 시키려고합니다. 결과가 전체 일치 수로 채워진 긴 목록의 길이 목록이되기를 바랍니다.
jac <- structure(list(s1 = "a", s2 = c("b", "c", "d"), s3 = 5),
.Names = c("s1", "s2", "s3"))
larger <- structure(list(s1 = structure(c(1L, 1L, 1L), .Label = "a", class = "factor"),
s2 = structure(c(2L, 1L, 3L), .Label = c("b", "c", "d"), class = "factor"),
s3 = c(1, 2, 7)), .Names = c("s1", "s2", "s3"), row.names = c(NA, -3L), class = "data.frame")
내가 사용하고 mapply(FUN = pmatch, jac, larger)
있지만 내가 아래하고자하는 형식으로 나에게 올바른 총을 준다 :
s1 s2 s3 s1result s2result s3result
a c 1 1 2 NA
a b 2 1 1 NA
a c 7 1 3 NA
그러나 pmatch가 모든 상황에서 이름 일치를 보장하지는 않는다고 생각하므로 여전히 문제가있는 함수를 작성했습니다.
prodMatch <- function(jac,larger){
for(i in 1:nrow(larger)){
if(names(jac)[i] %in% names(larger[i])){
r[i] <- jac %in% larger[i]
r
}
}
}
누구든지 도울 수 있습니까?
하나의 배수가되지 않게하는 또 다른 데이터 세트 :
larger2 <-
structure(list(s1 = structure(c(1L, 1L, 1L), class = "factor", .Label = "a"),
s2 = structure(c(1L, 1L, 1L), class = "factor", .Label = "c"),
s3 = c(1, 2, 7), s4 = c(8, 9, 10)), .Names = c("s1", "s2",
"s3", "s4"), row.names = c(NA, -3L), class = "data.frame")
mapply
일치하는 인덱스 목록을 반환합니다. 다음을 사용하여 데이터 프레임으로 변환 할 수 있습니다 as.data.frame
.
as.data.frame(mapply(match, jac, larger))
# s1 s2 s3
# 1 1 2 NA
# 2 1 1 NA
# 3 1 3 NA
그리고 cbind
와 결과는 larger
예상 무엇을 제공합니다 :
cbind(larger,
setNames(as.data.frame(mapply(match, jac, larger)),
paste(names(jac), "result", sep = "")))
# s1 s2 s3 s1result s2result s3result
#1 a c 1 1 2 NA
#2 a b 2 1 1 NA
#3 a d 7 1 3 NA
업데이트 : 두 목록의 이름이 일치하지 않는 경우를 처리하기 위해 larger
이름과 이름을 동시에 반복 jac
하고 다음과 같이 요소를 추출 할 수 있습니다.
as.data.frame(
mapply(function(col, name) {
m <- match(jac[[name]], col)
if(length(m) == 0) NA else m # if the name doesn't exist in jac return NA as well
}, larger, names(larger)))
# s1 s2 s3
#1 1 2 NA
#2 1 1 NA
#3 1 3 NA
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다