Я пытаюсь сопоставить значения в 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)
, который дает мне правильную сумму, но не в том формате, который я хотел бы ниже:
Однако, я не думаю, что 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")
Я буду иметь дело со многими строками и хотел бы использовать data.table, если это возможно. Имеет ли data.table эквивалент вашего предложения? – user3067851
Вы можете использовать 'as.data.table' для преобразования в' data.table'. – Psidom
при использовании «match», который найдет соответствующие индексы, даже если имена столбцов не совпадают, правильно? Это может быть проблемой, если у меня есть соответствующее значение в столбцах с разными именами, нет? – user3067851