我希望使用一种分组过滤器dplyr,在每个组中只返回具有最小变量值的行x.
我的问题是:正如预期的那样,在多个最小值的情况下,返回具有最小值的所有行.但在我的情况下,如果存在多个最小值,我只想要第一行.
这是一个例子:
df <- data.frame(
A=c("A", "A", "A", "B", "B", "B", "C", "C", "C"),
x=c(1, 1, 2, 2, 3, 4, 5, 5, 5),
y=rnorm(9)
)
library(dplyr)
df.g <- group_by(df, A)
filter(df.g, x == min(x))
Run Code Online (Sandbox Code Playgroud)
正如所料,返回所有最小值:
Source: local data frame [6 x 3]
Groups: A
A x y
1 A 1 -1.04584335
2 A 1 0.97949399
3 B 2 0.79600971
4 C 5 -0.08655151
5 C 5 0.16649962
6 C 5 -0.05948012 …Run Code Online (Sandbox Code Playgroud) 在R中,grep通常匹配多个字符串的向量与一个正则表达式.
问:是否有可能将单个字符串与多个正则表达式匹配?(没有循环遍历每个单一的正则表达式模式)?
一些背景:
我有7000多个关键字作为几个类别的指标.我无法更改该关键字字典.字典具有以下结构(第1列中的关键字,数字表示这些关键字所属的类别):
ab 10 37 41
abbrach* 38
abbreche 39
abbrich* 39
abend* 37
abendessen* 60 63
aber 20 23 45
abermals 37
Run Code Online (Sandbox Code Playgroud)
用"|"连接这么多关键字 是不可行的方式(我不知道哪个关键字产生了命中).此外,只是反转"模式"和"字符串"不起作用,因为模式具有截断,这在其他方面不起作用.
[ 相关问题,其他编程语言]
是否可以将组聚合直接添加到长格式原始数据框中dplyr?
到目前为止,我通过两个步骤完成了它:聚合和合并.dplyr合并步骤内外是否可能?
library(dplyr)
df <- data.frame(x=rnorm(15), A=factor(rep(1:3, each=5)))
df2 <- df %>% group_by(A) %>% summarise(x_mean=mean(x))
df3 <- merge(df, df2, by="A")
Run Code Online (Sandbox Code Playgroud)
结果如下:
> df3
A x x_mean
1 1 0.635 -0.077
2 1 -1.059 -0.077
3 1 0.408 -0.077
4 1 1.404 -0.077
5 1 -1.774 -0.077
6 2 -0.419 -0.256
7 2 0.417 -0.256
8 2 -0.443 -0.256
9 2 -0.431 -0.256
10 2 -0.403 -0.256
11 3 0.239 0.767
12 3 1.060 0.767
13 3 …Run Code Online (Sandbox Code Playgroud)