Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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 如果一个选择具有给定值,则选择整个组_R_Dataframe_Dplyr_Sqldf - Fatal编程技术网

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)

df
df[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