Я вижу, что Джорис и Аарон решили использовать примеры без факторов. Я могу, конечно, понять этот выбор. Для читателя с колонками, которые уже являются факторами, также будет существовать возможность принуждения к «характеру». Существует стратегия, которая позволяет избежать этого ограничения и который также допускает возможность, что может быть индексов в df2, которые не df1, которые я считаю, что аннулирует Joris Meys но не Aarons решения размещены до сих пор:
df1 <- data.frame(x1=1:4,x2=letters[1:4])
df2 <- data.frame(x1=c(2,3,5), x2=c("zz", "qq", "xx"))
It требует, чтобы уровни быть расширены, чтобы включать в себя пересечение два переменных факторов, а затем также необходимость отказаться от несоответствующих столбцов (= значения NA) в матче (DF1 $ x1, df2 $ x1)
df1$x2 <- factor(df1$x2 , levels=c(levels(df1$x2), levels(df2$x2)))
df1$x2[na.omit(match(df2$x1,df1$x1))] <- df2$x2[which(df2$x1 %in% df1$x1)]
df1
#-----------
x1 x2
1 1 a
2 2 zz
3 3 qq
4 4 d
Ницца. Я написал матч с противоположными аргументами и не мог понять, почему он был более сложным, чем я думал, что это должно быть. Я также добавлю свой ответ, потому что это может помочь другим подумать о том, как изменение порядка аргументов в матче может сделать вещи проще или сложнее. – Aaron
Спасибо, Joris. Я работал с «матчем», но не мог заставить его работать. – Mike
Я добавил решение, которое будет работать лучше в случае не уникальных значений в df1. – C8H10N4O2