[英]dplyr::mutate: temporary expensive variable as input to several other operations, rowwise
[英]dplyr define a temporary variable in mutate function
我正在使用R的dplyr包。假设我有一个名称和ID的数据框
df <- data.frame(dID=c(1 ,2 , 1 ),
name=c("a","a","b"))
我想从另一个数据库解析每个id并获取所需的信息。
db <- data.frame(dID=c(1 ,2 ,3 ,4 ),
info1=c("A" ,"B" ,"C" ,"D" ),
info2=c("AA","BB","CC","DD"))
当前,我正在使用以下代码。
df %>% rowwise() %>%
mutate(INFO1 = (function(id){paste(db %>% filter(dID == id) %>% select(info1))})(dID),
INFO2 = (function(id){paste(db %>% filter(dID == id) %>% select(info2))})(dID))
我想知道是否有可能找到一种解决方案来避免重复这段代码
db %>% filter(dID == id)
通过将其存储在一个临时变量中。 例如,当我将代码更改为
df %>% rowwise() %>%
mutate(tmp <- db %>% filter(dID == dID),
INFO1 = paste(tmp %>% select(info1)),
INFO2 = paste(tmp %>% select(info2))
)
我得到这个错误
mutate_impl(.data,点)中的错误:列
tmp <- db %>% filter(dID == dID)
是不受支持的类data.frame
有什么方法可以使代码更整洁,更快?
我同意马吕斯的评论。 为了演示,下面的代码重现了您的rowwise
dplyr
链的结果
left_join(df, db) %>% mutate_at(vars(starts_with("info")), ~as.numeric(as.factor(.x)))
# dID name info1 info2
#1 1 a 1 1
#2 2 a 2 2
#3 1 b 1 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.