R 如果一个选择具有给定值,则选择整个组
我想在此基础上创建一个新的数据框,它只选择具有负“差异”值的“标签”。但是,我想选择所有类似的“标签”,如下所示:R 如果一个选择具有给定值,则选择整个组,r,dataframe,dplyr,sqldf,R,Dataframe,Dplyr,Sqldf,我想在此基础上创建一个新的数据框,它只选择具有负“差异”值的“标签”。但是,我想选择所有类似的“标签”,如下所示: 我不知道如何在dplyr中做到这一点……SQL会更好吗?(我在R中很少使用sql包)您可以在子选择上使用in子句 datetime label option_title option_value lead difference 1 2016-07-22
我不知道如何在dplyr中做到这一点……SQL会更好吗?(我在R中很少使用sql包)您可以在子选择上使用in子句
datetime label option_title option_value lead difference
1 2016-07-22 GE 3 - Commercial Review 3 2 -1
2 2017-02-20 GE 2 - Solution Review 2 1 -1
3 2017-02-20 GE 1 - Opportunity Review 1 2 1
4 2017-04-18 GE 2 - Solution Review 2 3 1
5 2017-04-19 GE 3 - Commercial Review 3 4 1
6 2017-04-19 GE 4 - Submit Proposal 4 5 1
7 2017-08-08 GE 5 - Proposal Awarded 5 NA NA
8 2016-07-22 BHP Billiton - APJ Pre-Qualification 0 2 2
9 2016-07-26 BHP Billiton - APJ 2 - Solution Review 2 0 -2
10 2016-07-26 BHP Billiton - APJ Pre-Qualification 0 2 2
select * from my_table
where label in (
select label form my_table
where difference <0
)
从my_表中选择*
标签在哪里(
从我的表格中选择标签
如果差异可以用R来实现,则无需使用SQL包
样本数据
select * from my_table m
INNER JOIN (
select label form my_table
where difference <0
) t on m-label = t.lable
差异尝试子集函数
m_labels <- minus_df$labels
df如果您的数据帧被称为df
,那么这应该可以做到:
df <- subset(df, sign(df$diff) == -1)
或
变成以下df2
:
> df
label difference
1 test 2
2 test2 3
3 test2 -1
4 test3 -1
5 test4 4
6 test4 5
正如您所看到的,行编号现在是错误的。这是使用row.names(df2)修复的。另一种可能的方法是使用dplyr
:
库(dplyr)
df%%>%分组依据(标签)%%>%过滤器(任何差异<0))
#>#tibble:10 x 6
#>#组:标签[2]
#>日期时间标签选项\标题选项\价值引导
#>
#>1 2016-07-22 GE 3-商业评论3 2
#>2 2017-02-20 GE 2-解决方案审查2 1
#>3 2017-02-20 GE 1-机会回顾1 2
#>4 2017-04-18 GE 2-解决方案审查2 3
#>5 2017-04-19 GE 3-商业审查3 4
#>6 2017-04-19 GE 4-提交提案4 5
#>7 2017-08-08通用电气5-中标标书5不适用
#>8 2016-07-22必和必拓-APJ资格预审0 2
#>9 2016-07-26必和必拓-APJ 2-解决方案审查2 0
#>10 2016-07-26必和必拓APJ资格预审02
#>#…还有1个变量:差异
数据
库(readr)
dfdf[ave(df$difference,df$label,FUN=function(x)any(x<0)),]
这将仅选择差异为负值的行,但OP希望标签中包含至少一个负值差异的所有行。
m_labels <- minus_df$labels
df <- subset(df, sign(df$diff) == -1)
aux <- df$label[df$difference < 0]
df2 <- df[df$label %in% aux,]
df2 <- df[df$label %in% df$label[df$difference < 0],]
df <- df[df$label %in% df$label[df$difference < 0],]
> df
label difference
1 test 2
2 test2 3
3 test2 -1
4 test3 -1
5 test4 4
6 test4 5
> df2
label difference
2 test2 3
3 test2 -1
4 test3 -1
> df2
label difference
1 test2 3
2 test2 -1
3 test3 -1