小编Jam*_*131的帖子

如何在函数中将字符串传递给dplyr过滤器?

我正在寻找一种将字符串作为输入传递给filter_我自己的函数中dplyr包中的函数的方法。我将数据框设置如下:

df = data.frame(
    X1 = LETTERS[1:5], 
    X2 = c("apple", "apple", "apple", "banana", "banana")
)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种编写函数的方法,在该函数中我可以传递“苹果”或“香蕉”来过滤数据帧。

我试过了:

filterFruit = function(Data, Fruit){
   retVal = filter_(Data, "X2 == Fruit")
   return(retVal)
}
Run Code Online (Sandbox Code Playgroud)

然后传递值:

apple1 = filterFruit(df, "apple")
apple1
Run Code Online (Sandbox Code Playgroud)

这将返回一个错误:

Error: object 'Fruit' not found
Run Code Online (Sandbox Code Playgroud)

我尝试了其他几种方法,但均未成功,希望有人能提供帮助。

编辑:

我已经意识到我不需要为此操作使用filter_,因为我没有选择我要过滤的列,而可以将参数传递到没有引号的filter中。但是,问题仍然代表您遇到的情况:

df = data.frame(
    X1 = LETTERS[1:5], 
    X2 = c("apple", "apple", "apple", "banana", "banana")
    X3 = c("apple", "banana", "apple", banana", "apple")
)
Run Code Online (Sandbox Code Playgroud)

并且需要确定您要作为过滤依据的列(X2或X3)。

r dplyr standard-evaluation

5
推荐指数
1
解决办法
1507
查看次数

如何通过重复出现的 NA 来分割向量

我希望能够定义一个函数,该函数将在每次有重复 n 次的 NA(或其他用户定义的分隔符)时拆分向量。在形式:

na.split = function(vec, n, sep = NA)
Run Code Online (Sandbox Code Playgroud)

其中 vector 是分割的向量,n 是定义分割的 NA 的数量,sep 是定义的分隔符(默认为 NA)。

例如使用这样的向量:

vec = c(1, 2, NA, 4, 5, NA, NA, NA, 3, 2, NA, NA, NA, 1, NA, NA 2)
Run Code Online (Sandbox Code Playgroud)

输出将是一个向量列表,例如对于 n = 3:

vec1 = c(1, 2, NA, 4, 5), vec2 = c(3, 2), vec3 = c(1, NA, NA, 2)
Run Code Online (Sandbox Code Playgroud)

我看过一个类似的问题How to split a vector by delimiter? 它适用于单个实例,但无法找到任何适用于重复实例的方法。

r

2
推荐指数
1
解决办法
259
查看次数

标签 统计

r ×2

dplyr ×1

standard-evaluation ×1