我有一个表列表(金额,年和月),我想过滤与完整年份相对应的行。 也就是说,我想省略下面给出的样本数据帧的最后4行,即2015年,而剩下的60行。是否可以使用单个dplyr命令来做到这一点?

我尝试了这个:

df %>%
    group_by(year) %>%
    tally() %>%
    filter (n==12) %>%
    ungroup() 

但是我猜ungroup所做的事情与我想要的有所不同。 单个dplyr命令可以做到吗?

df <- structure(list(amount = c(16365, 31850, 32230, 34177.75, 27900, 
29650, 28846, 27300, 37115.31, 34130.38, 39676.1, 47244.44, 3500, 
25425.48, 22628.43, 30822.86, 30100, 41567.13, 25400, 23125, 
40073.75, 16505.82, 17770, 38406.03, 1528.25, 23475.77, 29869.69, 
17020, 19270, 13085.47, 10607.48, 7800, 15220, 15260, 17580, 
25094.66, 3908.74, 8150, 25055.89, 19690.65, 12445.4, 10347.39, 
7645.39, 49300, 8690, 13660, 16510, 34457.08, 522.68, 10202, 
18900, 25027.1, 24956.42, 23259, 32743, 37226, 32697, 32258, 
31336.67, 36135.81, 4389.26, 12450, 46220.43, 36770.7), year = c("2010", 
"2010", "2010", "2010", "2010", "2010", "2010", "2010", "2010", 
"2010", "2010", "2010", "2011", "2011", "2011", "2011", "2011", 
"2011", "2011", "2011", "2011", "2011", "2011", "2011", "2012", 
"2012", "2012", "2012", "2012", "2012", "2012", "2012", "2012", 
"2012", "2012", "2012", "2013", "2013", "2013", "2013", "2013", 
"2013", "2013", "2013", "2013", "2013", "2013", "2013", "2014", 
"2014", "2014", "2014", "2014", "2014", "2014", "2014", "2014", 
"2014", "2014", "2014", "2015", "2015", "2015", "2015"), month = c("01", 
"02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", 
"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", 
"12", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", 
"11", "12", "01", "02", "03", "04", "05", "06", "07", "08", "09", 
"10", "11", "12", "01", "02", "03", "04", "05", "06", "07", "08", 
"09", "10", "11", "12", "01", "02", "03", "04")), .Names = c("amount", 
"year", "month"), class = c("tbl_df", "data.frame"), row.names = c(NA, 
-64L))

===============>>#1 票数:6 已采纳

tally()等于summarise(n=n()) 但是,在这种情况下,您希望保留数据框的原始行,但要对其进行过滤,以便删除不完整年份的一部分。 @AndresT的答案可以很好地工作,但是您也可以更简洁地完成它,而无需执行创建列来计算每个组的行数的中间步骤:

df %>% group_by(year) %>% filter(n()==12)

  ask by Brani translate from so

未解决问题?本站智能推荐:

2回复

R:如何使用dplyr作为聚合的替代方法

我的数据帧times如下所示: 我正在使用aggregate(time ~ user, times, function(x) sort(as.vector(x)))来得到这个: 问题是,我有超过2000万times参赛作品,因此aggregate times超过4小时。 是否有
1回复

与dplyr的意思错误的结果

我是R的初学者,我有一个很大的data.frame(超过300000 obs),看起来像这样: 而且我需要获取其他列,例如每天的平均温度,最小值,最大值和平均露点最大值和最小值。 我每天都有很多结果,因为它是每小时一次。 我尝试了很多方法,但结果不对。 首先,我尝试通过以下代码
1回复

使用dplyr过滤行

我有一个数据框 我有一个规则列表,我希望通过这些规则来过滤行: 规则之一是 如果当前凭证和滞后凭证的编号相等,并且都具有异常标记,则将该行标记为True 。 当我将此规则与其他一对夫妇返回第4行作为True时,它应该返回False 这是我与所有过滤规则一起使用
1回复

Dplyr-错误:“列”的类型不受支持

在data.frame上使用dplyr来计算每个字符变量组的缺失观测值的数量时,我遇到了一个奇怪的问题。 这将创建错误“错误:列“”的类型不受支持。 为了复制它,我创建了一个子集。 子集rdata文件在此处可用: rdata文件包括dftest data.frame首先。 使用我提供
2回复

使用count(),aggregate(),data.table()或dplyr()来汇总数据(平均值,标准差)

概观 我有一个名为“subset_leaf_1”的数据集(见下文),显示了气候环境如何影响特定橡树树种( Quercus petraea)的冠层指数。 我有一个名为Urbanisation_index的列(即下面的数据框),其中包含四个子级别(即1,2,3和4)。 每个子级(1-4
2回复

通过dplyr进行汇总-将单个列从因子突变为数值

嗨,谢谢您的阅读。 我一直在尝试聚合一些数据,并且已经能够通过聚合函数成功地做到这一点,但是我也想通过使用dplyr运行管道来尝试做同样的事情-但是我一直收到错误消息: mutate_impl(.data,点)中的错误:评估错误:找不到函数“ 15.2”。 我目前有此数据
1回复

如何基于上一行过滤行并使用dplyr保留上一行?

我试图使用基于上一行的条件对数据集的行进行子集化,同时将上一行保留在子集数据中。 这是基本相同,这里的问题,但我要寻找一个dplyr的方法: 根据上一行的值选择特定的行(在同一列中) 我已经在评论中对该答案采用了dplyr方法,但是我无法弄清楚保留上一行的最后一步。 我可以得
1回复

dplyr过滤器函数提供错误的数据

我有以下数据集:(样本) 我有21个队,所以有很多行。 我正在尝试过滤在实验中表现良好的团队行(使用dplyr包): 但是它让我搞砸了数据并且丢失了许多行。 另一方面,当我使用时: 它为我提供了我想要的正确数据集。 有什么不同? 我在第一个命令中做错了什么? 谢
1回复

dplyr:分组减去值(基于预过滤的行)

我被困在(可能)非常明显的事情上,但我无法弄清楚实际问题是什么。 我想做什么:从组内的所有值中减去对应于TimePoint == 1的值(此处:Group = Gene,Genotype)。 我希望输出如下代码所示: 但是,我将根据给定的TimePoint选择值,而不是第一
1回复

使用string和dplyr方法过滤R中的行

这个问题已经在这里有了答案: 按逻辑条件过滤data.frame行 8个答案 我是R语言的新手,并尝试通过字符串过滤包含所有数据的整行。 我想将过滤后的行另存为新变量或数据框。 我想使用库(dplyr)我的数据框“解剖”如下所示: 我现在尝试: