繁体   English   中英

dplyr在mutate函数中定义一个临时变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM