我正在使用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
有什么方法可以使代码更整齐,更快?
答案 0 :(得分:1)
我同意马吕斯的评论。为了演示,以下内容重现了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