使用来自purrr的映射提取另一个变量的条件值
我正在尝试将多个数据帧的值映射到主数据帧 下面的例子部分有效,我在最后一部分遇到了问题使用来自purrr的映射提取另一个变量的条件值,r,purrr,R,Purrr,我正在尝试将多个数据帧的值映射到主数据帧 下面的例子部分有效,我在最后一部分遇到了问题 library(tidyverse) library(purrr) library(data.table) # main data eid <- c(111,333,555,777,999) value <-c(121,135,565,400,450) dat <- as.data.frame(cbind(eid,value),stringsAsFactors=F) # data fro
library(tidyverse)
library(purrr)
library(data.table)
# main data
eid <- c(111,333,555,777,999)
value <-c(121,135,565,400,450)
dat <- as.data.frame(cbind(eid,value),stringsAsFactors=F)
# data from mi to be mapped to main data
eid <- c(111,222,444)
date <- c(134,234,213)
mi <- as.data.frame(cbind(eid,mi.value),stringsAsFactors=F)
# data from cva to be mapped to main data
eid <- c(333,444,555,666)
date <- c(124,132,125,457)
cva <-as.data.frame(cbind(eid,cva.value),stringsAsFactors=F)
# using map to see if eid in 'mi' and 'cva' appear in main data
each.subsequent <- map(list(mi,cva),~
as.integer(dat$eid %in% .x$eid))
names(each.subsequent) <- c("mi","cva")
each.subsequent <- as.data.frame(each.subsequent)
你可以很容易地用两个
左键连接
,除非我遗漏了一些东西(更多的数据。帧
可能):
编辑:
如果您有更多的数据。帧
使用减少
:
list(dat, mi, cva) %>% reduce(left_join, by = "eid")
谢谢-是的,我就是这么做的。我有很多小型链接数据帧,即mi、cva等。使用上述方法,需要键入所有代码,因此希望找到一种使用purr::MAP循环的方法参见我的更新,使用
reduce
只需键入一次as.data.frame(cbind(
可能会给您带来麻烦cbind
转换为matrix
,而matrix只能有一个类
。更好的是data.frame(
谢谢akrun-一如既往地非常有用
structure(list(eid = c(111, 333, 555, 777, 999), value = c(121,
135, 565, 400, 450), mi = c(1L, 0L, 0L, 0L, 0L), cva = c(0L,
1L, 1L, 0L, 0L), mi.date = c(134, NA, NA, NA, NA), cva.date = c(NA,
124, 125, NA, NA)), .Names = c("eid", "value", "mi", "cva", "mi.date",
"cva.date"), row.names = c(NA, -5L), class = "data.frame")
dat %>%
left_join(mi, by ="eid") %>%
left_join(cva, by ="eid")
# eid value mi.value cva.value
# 1 111 121 134 NA
# 2 333 135 NA 124
# 3 555 565 NA 125
# 4 777 400 NA NA
# 5 999 450 NA NA
list(dat, mi, cva) %>% reduce(left_join, by = "eid")