Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.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中另一个df中的值的组合,在df中创建一个变量_R_Function_Filter - Fatal编程技术网

基于R中另一个df中的值的组合,在df中创建一个变量

基于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()中传递向量,所以我得到错误消息:较长的对象长度不是较短对象长度的倍数 同样,有许多组合,所以不可能在函数中执行

初学者在r!我想在df中创建一个变量(newvar),它基于df中其他变量的值(x,y,z)。一个外部文件(exfile)有4列,在前3列中有x、y和z的所有可能组合,第4列(answer)有我希望newvar的值。我可以手动使用mutate()+case_when()并列出所有组合,但是,有很多组合,所以我决定编写一个简单的函数

exfile如下所示:

问题是我不能在filter()中传递向量,所以我得到错误消息:较长的对象长度不是较短对象长度的倍数

同样,有许多组合,所以不可能在函数中执行一系列if()操作

我该怎么办

谢谢大家!

编辑:我已尝试在%中执行%而不是==,并收到以下错误消息: 函数_列表[k]中出错: (列表)对象不能强制为“double”类型


更新: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