基于R中另一个df中的值的组合,在df中创建一个变量
初学者在r!我想在df中创建一个变量(newvar),它基于df中其他变量的值(x,y,z)。一个外部文件(exfile)有4列,在前3列中有x、y和z的所有可能组合,第4列(answer)有我希望newvar的值。我可以手动使用mutate()+case_when()并列出所有组合,但是,有很多组合,所以我决定编写一个简单的函数 exfile如下所示: 问题是我不能在filter()中传递向量,所以我得到错误消息:较长的对象长度不是较短对象长度的倍数 同样,有许多组合,所以不可能在函数中执行一系列if()操作 我该怎么办 谢谢大家! 编辑:我已尝试在%中执行%而不是==,并收到以下错误消息: 函数_列表[k]中出错: (列表)对象不能强制为“double”类型基于R中另一个df中的值的组合,在df中创建一个变量,r,function,filter,R,Function,Filter,初学者在r!我想在df中创建一个变量(newvar),它基于df中其他变量的值(x,y,z)。一个外部文件(exfile)有4列,在前3列中有x、y和z的所有可能组合,第4列(answer)有我希望newvar的值。我可以手动使用mutate()+case_when()并列出所有组合,但是,有很多组合,所以我决定编写一个简单的函数 exfile如下所示: 问题是我不能在filter()中传递向量,所以我得到错误消息:较长的对象长度不是较短对象长度的倍数 同样,有许多组合,所以不可能在函数中执行
更新:internal_join()是问题的解决方案!谢谢大家 你能展示一下
exfile
和df
的样子吗?您是否需要将==
替换为%
中的%
过滤器中的%
?列名是否始终为x、y、zi?如果您想要所有可能的组合,请执行交叉(x、y、z)
听起来像是x、y、z上的简单合并。@RonakShah感谢您的回复,请在上面编辑回复!
foo <- function (x, y, z) {
exfile <- read.csv("exfile.csv")
exfile %>% filter (x==x, y==y, z==z) %>%
select (answer) %>% as.numeric (.) -> x
return (x)
}
df %>%
mutate (newvar = foo(x, y, z))-> df