是否有一个R函数可以为每个组查找多个值?

是否有一个R函数可以为每个组查找多个值?,r,dataframe,filter,group-by,grouping,R,Dataframe,Filter,Group By,Grouping,我的数据集中有三组:咖啡、茶和水。数据集如下所示 df <- data.frame(drink = c('Coffee','Coffee', 'Coffee', 'Coffee', 'Coffee', 'Tea', 'Tea', 'Tea', 'Tea', 'Tea', 'Water', 'Water', 'Water','Water', 'Water'), date = as.Date(c('2020-08-01', '2020-08-02', '2020-08-03', '2020-0

我的数据集中有三组:咖啡、茶和水。数据集如下所示

df <- data.frame(drink = c('Coffee','Coffee', 'Coffee', 'Coffee', 'Coffee', 'Tea', 'Tea', 'Tea', 'Tea', 'Tea', 'Water', 'Water', 'Water','Water', 'Water'), date = as.Date(c('2020-08-01', '2020-08-02', '2020-08-03', '2020-08-04', '2020-08-05', '2020-08-02', '2020-08-03', '2020-08-04', '2020-08-05', '2020-08-06', '2020-08-03', '2020-08-04', '2020-08-05', '2020-08-06', '2020-08-07')))
比如说,我想知道在2020年4月8日、2020年5月8日和2020年6月8日,是否有我饮酒的特定群体。我想拥有一个功能,当我在指定的日期喝下茶和水时,它将返回给我

我试着用这样的东西,但它不起作用

with(df, drink[date == 2020-08-04 && date == 2020-08-05 && date == 2020-08-06])

是否有其他函数可以查看同一组中每行具有不同值的组,并筛选以检查所需的值?也许有一种方法可以使用groupby。任何建议都会很有帮助

您可以尝试此功能:

get_common_drink <- function(data, dates) {
  df1 <- subset(data, date %in% dates)
  Reduce(intersect, split(df1$drink, df1$date))
}

get_common_drink(df,  as.Date(c('2020-08-04', '2020-08-05', '2020-08-06')))
#[1] "Tea"   "Water"

获取普通饮料您可以尝试此功能:

get_common_drink <- function(data, dates) {
  df1 <- subset(data, date %in% dates)
  Reduce(intersect, split(df1$drink, df1$date))
}

get_common_drink(df,  as.Date(c('2020-08-04', '2020-08-05', '2020-08-06')))
#[1] "Tea"   "Water"

获取普通饮料您可以在
df
上使用
unstack
并将其子集化为特定日期,然后在
Reduce
中使用
intersect
查找所有子集中的值

Reduce(intersect, unstack(df)[c("2020-08-04", "2020-08-05", "2020-08-06")])
#[1] "Tea"   "Water"
或取消堆栈之前的子集

Reduce(intersect, unstack(df[df$date %in% as.Date(c("2020-08-04",
 "2020-08-05", "2020-08-06")),]))
#[1] "Tea"   "Water"

您可以在
df
上使用
unstack
并将其子集化为特定日期,然后在
Reduce
中使用
intersect
查找所有子集中的值

Reduce(intersect, unstack(df)[c("2020-08-04", "2020-08-05", "2020-08-06")])
#[1] "Tea"   "Water"
或取消堆栈之前的子集

Reduce(intersect, unstack(df[df$date %in% as.Date(c("2020-08-04",
 "2020-08-05", "2020-08-06")),]))
#[1] "Tea"   "Water"

修好了!对不起,修好了!对不起