Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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
在R中,有条件地在另一个数据帧中查找变量_R_Dplyr_Merge_Lookup - Fatal编程技术网

在R中,有条件地在另一个数据帧中查找变量

在R中,有条件地在另一个数据帧中查找变量,r,dplyr,merge,lookup,R,Dplyr,Merge,Lookup,背景 我在r有两个df,一个叫做d,另一个叫做insuranced包含唯一的ID列表,以及两个属性,gender和zip(与此问题无关)保险包含一些相同的ID编号,但它们不是唯一的。它们代表某一年的人民健康保险计划。insurance表中的一些ID重复,因为该人在该年有多个保险计划(即他们更换了保险人)。下面是制作这些表的一些代码: d <- data.frame(ID = c("a","b","c","d",

背景

我在r有两个df,一个叫做
d
,另一个叫做
insurance
d
包含唯一的
ID
列表,以及两个属性,
gender
zip
(与此问题无关)<代码>保险包含一些相同的
ID
编号,但它们不是唯一的。它们代表某一年的人民健康保险计划。
insurance
表中的一些
ID
重复,因为该人在该年有多个保险计划(即他们更换了保险人)。下面是制作这些表的一些代码:

d <- data.frame(ID = c("a","b","c","d","e","f"), 
                    gender = c("f","f","m","f","m","m"), 
                    zip = c(48601,60107,29910,54220,28173,44663),stringsAsFactors=FALSE)
d

d%>%
左联合(保险%>%筛选器(ins\U类型==“public”),由=“ID”)%%>%
mutate(public=!is.na(ins_类型))%>%
选择(-ins\U类型)

这是一个使用base R的解决方案。无需安装任何与tidyverse相关的软件包

# Define public column based on insurance$ins_type
df$public <- ifelse(insurance$ins_type == "public", 1, 0)

# Now we'll define df$insurer as the result of applying a function
# that receives the ids and df$public as arguments.

# if the public type is not 1, return NA, else return the insurer name
# in the insurance df where type is 1 and id = id

df$insurer <- mapply(
    function(id, type) {
    if(type != 1)
        return(NA)
    return(insurance$insurer[insurance$id == id & insurance$type == type])
    }
    df$id,
    df$public
)
#基于保险$INSU类型定义公共列

df$public在“public”列的第一个定义中,如果在另一个场景中,我想引用该列中的任何条目,而不仅仅是“public”?如果您想引用任何特定条目,那么您只需将“public”更改为“which you want”。现在,如果您想要任何东西,那么继续在这种情况下设置
df$public,一种可读性很好的方法是定义您对这个混合示例感兴趣的条目,比如:
entries哦,是的,我的意思是“保险$ins_类型中的任何条目,即使是NA”。所以,就像df$public不再是真正的公共,它只是df$ins_类型。所以我猜这将是
df$public No,这将是错误的。ifelse的工作原理是将第一个参数作为逻辑条件进行测试(它将是true或false)。所以你写它的方式,它没有意义,因为它不是一个逻辑条件。同样,如果您不关心它是什么条目,那么只需将所有“ins_type”设置为1。或者,如果要保留分类变量,可以将其设置为一个因子。请阅读Hadley Wickham所著的Advanced R的介绍部分。它会帮你的!