Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用来自purrr的映射提取另一个变量的条件值_R_Purrr - Fatal编程技术网

使用来自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")