我希望我的问题格式是正确的,因为这是我第一次发帖,对R.
下面是我目前使用的一些运动员运动数据的一个小样本。
Player Period Dist Date Type
Player_2 4245.9002 31/7/18主要培训
123个Player_1课程4868.2153 2/8/18主要培训
124年Player_2课程4515.1996 2/8/18主要培训
Player_2 3215.8634 7/8/18主要培训
126 Player_2修改551.8737 7/8/18主要训练
127年Player_2 4264.7384 9/8/18主要培训
Player_1课程4038.1687 16/8/18主要培训
129 Player_2课程4751.6978 16/8/18主要培训
130 Player_1 RTP 4038.1687 16/8/18主要培训
131 Player_2修改229.6872 16/8/18主要训练
132 Player_2改进342.2797 16/8/18主要训练
133个Player_1课程3573.4509 23/8/18主要培训
Player_2课程3717.3467 23/8/18主要培训
reprex()
#>错误::1:16:意外符号
#> 1:播放时间
#> ^
我想使用dplyr
根据多个标准删除数据帧中的行。具体来说,我想删除包含Session
的行,其中有Modified
或RTP
共享相同的Date
。例如,当Player_2
完成Modified
关于7/8/2018
的培训时,我希望删除该日期的Session
数据。
Player Period Dist Date Type
Player_2 3215.8634 7/8/18主要培训
126 Player_2修改551.8737 7/8/18主要训练
#>错误::1:16:意外符号
#> 1:播放时间
#> ^
同样,对于16/8/2018
,Player_1
和Player_2
在这一天分别完成了Modified
和RTP
培训。
Player Period Dist Date Type
Player_1课程4038.1687 16/8/18主要培训
129 Player_2课程4751.6978 16/8/18主要培训
130 Player_1 RTP 4038.1687 16/8/18主要培训
131 Player_2修改229.6872 16/8/18主要训练
132 Player_2改进342.2797 16/8/18主要训练
#>错误::1:16:意外符号
#> 1:播放时间
#> ^
过去,我使用这样的代码过滤过数据。
db18 <- db18 %>%
筛选器(%c(“会话”)中的句点%)
但是,我希望删除包含Modified
或RTP
的运动员Modified
数据,因为它不会“污染”我试图执行的分析。想知道如果可能的话我该怎么做。
任何帮助都将不胜感激。谢谢。
发布于 2018-08-30 10:15:37
一种方法是首先使用group_by()
函数,然后将过滤器应用到组中。在下面的代码中,我使用了group_by()
和mutate()
来创建一个新列来进行筛选。也许有一个更优雅的解决方案,但这可能会让您开始。
df <- tibble::tribble(
~Player, ~Period, ~Dist, ~Date,
'Player_2', 'Session', 4245.9002, '31/7/18',
'Player_1', 'Session', 4868.2153, '2/8/18',
'Player_2', 'Session', 4515.1996, '2/8/18',
'Player_2', 'Session', 3215.8634, '7/8/18',
'Player_2', 'Modified', 551.8737, '7/8/18',
'Player_2', 'Session', 4264.7384, '9/8/18',
'Player_1', 'Session', 4038.1687, '16/8/18',
'Player_2', 'Session', 4751.6978, '16/8/18',
'Player_1', 'RTP', 4038.1687, '16/8/18',
'Player_2', 'Modified', 229.6872, '16/8/18',
'Player_2', 'Modified', 342.2797, '16/8/18',
'Player_1', 'Session', 3573.4509, '23/8/18',
'Player_2', 'Session', 3717.3467, '23/8/18'
)
df %>%
group_by(Player, Date) %>%
mutate(filter_col = ifelse(all(c('Session','Modified') %in% Period), 'delete', 'keep'),
filter_col = ifelse(all(c('Session','RTP') %in% Period), 'delete', filter_col)) %>%
ungroup() %>%
filter(filter_col == 'keep')
发布于 2018-08-31 05:05:33
希望这能帮到你。
player <- read.csv("player.csv")
player
player
Id Player Period Dist Date Type
1 122 Player_2 Session 4245.9002 31/07/18 Main Training
2 123 Player_1 Session 4868.2153 02/08/18 Main Training
3 124 Player_2 Session 4515.1996 02/08/18 Main Training
4 125 Player_2 Session 3215.8634 07/08/18 Main Training
5 126 Player_2 Modified 551.8737 07/08/18 Main Training
6 127 Player_2 Session 4264.7384 09/08/18 Main Training
7 128 Player_1 Session 4038.1687 16/08/18 Main Training
8 129 Player_2 Session 4751.6978 16/08/18 Main Training
9 130 Player_1 RTP 4038.1687 16/08/18 Main Training
10 131 Player_2 Modified 229.6872 16/08/18 Main Training
11 132 Player_2 Modified 342.2797 16/08/18 Main Training
12 133 Player_1 Session 3573.4509 23/08/18 Main Training
13 134 Player_2 Session 3717.3467 23/08/18 Main Training
按Player
和Date
列分组。然后提取Id,如果某个特定的Date
有Modified(or)RTP
和Session
。
library(dplyr)
removable <- player %>% group_by_(.dots = c("Player", "Date")) %>%
filter( (sum(Period == 'Session') >= 1) & ((sum(Period == 'Modified') != 0) | (sum(Period == 'RTP') != 0 ))) %>%
filter(Period == 'Session')
现在,如果有任何player
与removable$Id
匹配,则从removable$Id
数据中删除行
player <- player[!(player$Id %in% removable$Id), ]
player
Id Player Period Dist Date Type
1 122 Player_2 Session 4245.9002 31/07/18 Main Training
2 123 Player_1 Session 4868.2153 02/08/18 Main Training
3 124 Player_2 Session 4515.1996 02/08/18 Main Training
5 126 Player_2 Modified 551.8737 07/08/18 Main Training
6 127 Player_2 Session 4264.7384 09/08/18 Main Training
9 130 Player_1 RTP 4038.1687 16/08/18 Main Training
10 131 Player_2 Modified 229.6872 16/08/18 Main Training
11 132 Player_2 Modified 342.2797 16/08/18 Main Training
12 133 Player_1 Session 3573.4509 23/08/18 Main Training
13 134 Player_2 Session 3717.3467 23/08/18 Main Training
https://stackoverflow.com/questions/52092518
复制相似问题