说我有两个数据框。一个是我的“主” df,另一个是我用来替换主df中的值的一个。
因此,在cd
的列dfMain
中,每次出现因子水平orange
时,我都想用dfReplace
(具有行名)中的相应行替换它称为orange
)
这将导致dfMain
的宽度增加3列,因为cd
列消失了,它获得了X1, X2, X3, X4
列
这里的关键是我需要尽可能提高效率,因为我的实际数据要长得多,长得多
可复制的示例:
set.seed(42)
dfMain <- data.frame('av' = sample.int(10, 100, replace = TRUE),
'ba' = sample.int(10, 100, replace = TRUE),
'cd' = sample(c('orange', 'apple', 'banana', 'strawberry', 'blueberry', 'blackberry'), 100, replace = TRUE))
dfReplace <- data.frame('X1' = runif(6),
'X2' = runif(6),
'X3' = runif(6),
'X4' = runif(6))
rownames(dfReplace) <- c('orange', 'apple', 'banana', 'strawberry', 'blueberry', 'blackberry')
答案 0 :(得分:2)
我建议先将行名转换为显式表字段,然后将cd因子转换为字符,然后再进行数据库联接,这应该非常快。
library(dplyr)
dfReplace2 <- dfReplace %>%
add_rownames(var = "cd")
dfMain %>%
mutate(cd = as.character(cd)) %>%
left_join(dfReplace2)
我将原始的“ cd”字段留在那里,但是可以用%>% select(-cd)
删除。