Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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_Dplyr - Fatal编程技术网

R 有没有一种方法可以进行过滤排名,从而保留完整的数据帧?

R 有没有一种方法可以进行过滤排名,从而保留完整的数据帧?,r,dplyr,R,Dplyr,我在一个大的data.frame上进行数据分析。是否有一种方法可以基于保留完整数据的筛选条件进行排名。frame?代码的工作原理类似于使用dplyr过滤器结果,但在变异后保留整个数据帧的内容 library(tidyverse) # Data df <- read.table(sep="\t", text=" namePlayer groupPosition minutesTotals fgmTotals fgaTotals fg3mTotals fg3aTot

我在一个大的
data.frame
上进行数据分析。是否有一种方法可以基于保留完整
数据的筛选条件进行排名。frame
?代码的工作原理类似于使用
dplyr
过滤器
结果,但在
变异后保留整个
数据帧的内容

library(tidyverse)

# Data
df <- read.table(sep="\t", text="
namePlayer    groupPosition   minutesTotals   fgmTotals   fgaTotals   
fg3mTotals  fg3aTotals  fg2mTotals  fg2aTotals  ftmTotals   ftaTotals   
orbTotals   drbTotals   trbTotals   astTotals   stlTotals   blkTotals   
tovTotals   pfTotals    ptsTotals
             Anthony Davis  C   1267    353 698  34 105 319 593 236 294 114 340 454 151 58  90   71  86  976
             Bradley Beal   G   1392    336 714  89 262 247 452 137 174  36 148 184 180 47  32   98 115  898
             Damian Lillard G   1347    335 741 117 297 218 444 229 256  30 151 181 219 35  19  104  69 1016
             Giannis Antetokounmpo  F   1146    335 572  12  79 323 493 212 305  83 346 429 207 45  54  145 116  894
             James Harden   G   1261    331 752 162 416 169 336 318 374  26 175 201 291 70  19  189 116 1142
             Joel Embiid    C   1255    330 680  42 142 288 538 295 368  89 413 502 129 21  70  128 125  997
             Kemba Walker   G   1276    324 734 122 335 202 399 171 208  16 142 158 223 48  18   89  61  941
             Kevin Durant   F   1399    383 760  70 192 313 568 274 300  19 274 293 237 32  39  133  74 1110
             LeBron James   F   1178    340 656  68 191 272 465 180 264  32 251 283 243 44  24  116  54  928
             Paul George    F   1271    332 734 119 315 213 419 179 215  56 235 291 146 82  22   99 106  962", header=TRUE, stringsAsFactors=FALSE)

df_calc <- df %>%
  # Overall Rank
  mutate(o_rank = rank(desc(ptsTotals))) %>%
  # Rank by Position
  group_by(groupPosition) %>%
  mutate(position_rank = rank(desc(ptsTotals))) %>%
  ungroup() %>%
  # Conditional Rank
  mutate(custom_rank = ifelse(groupPosition %in% c("G", "F") & position_rank > 3 |
                          groupPosition =="C" & position_rank > 3, rank(desc(ptsTotals)), NA ))


df_calc_correct <-  df %>%
  # Overall Rank
  mutate(o_rank = rank(desc(ptsTotals))) %>%
  # Rank by Position
  group_by(groupPosition) %>%
  mutate(position_rank = rank(desc(ptsTotals))) %>%
  ungroup() %>%
  # Conditional Rank
  filter(groupPosition %in% c("G", "F") & position_rank > 3 |
                            groupPosition =="C" & position_rank > 3) %>% 
  mutate(custom_rank = rank(desc(ptsTotals)))

df_calc
#> # A tibble: 10 x 23
#>    namePlayer groupPosition minutesTotals fgmTotals fgaTotals fg3mTotals
#>    <chr>      <chr>                 <int>     <int>     <int>      <int>
#>  1 "        ~ C                      1267       353       698         34
#>  2 "        ~ G                      1392       336       714         89
#>  3 "        ~ G                      1347       335       741        117
#>  4 "        ~ F                      1146       335       572         12
#>  5 "        ~ G                      1261       331       752        162
#>  6 "        ~ C                      1255       330       680         42
#>  7 "        ~ G                      1276       324       734        122
#>  8 "        ~ F                      1399       383       760         70
#>  9 "        ~ F                      1178       340       656         68
#> 10 "        ~ F                      1271       332       734        119
#> # ... with 17 more variables: fg3aTotals <int>, fg2mTotals <int>,
#> #   fg2aTotals <int>, ftmTotals <int>, ftaTotals <int>, orbTotals <int>,
#> #   drbTotals <int>, trbTotals <int>, astTotals <int>, stlTotals <int>,
#> #   blkTotals <int>, tovTotals <int>, pfTotals <int>, ptsTotals <int>,
#> #   o_rank <dbl>, position_rank <dbl>, custom_rank <dbl>

df_calc_correct
#> # A tibble: 2 x 23
#>   namePlayer groupPosition minutesTotals fgmTotals fgaTotals fg3mTotals
#>   <chr>      <chr>                 <int>     <int>     <int>      <int>
#> 1 "        ~ G                      1392       336       714         89
#> 2 "        ~ F                      1146       335       572         12
#> # ... with 17 more variables: fg3aTotals <int>, fg2mTotals <int>,
#> #   fg2aTotals <int>, ftmTotals <int>, ftaTotals <int>, orbTotals <int>,
#> #   drbTotals <int>, trbTotals <int>, astTotals <int>, stlTotals <int>,
#> #   blkTotals <int>, tovTotals <int>, pfTotals <int>, ptsTotals <int>,
#> #   o_rank <dbl>, position_rank <dbl>, custom_rank <dbl>
库(tidyverse)
#资料
df%
#按职位排列
分组依据(分组位置)%>%
变异(位置等级=等级(描述(ptsTotals)))%>%
解组()%>%
#条件秩
变异(自定义等级=ifelse(组位置%c(“G”、“F”)中的%c)和位置等级>3|
groupPosition==“C”和位置(排名>3,排名(描述(ptsTotals)),NA))
df_计算正确率%
#总排名
变异(o_秩=秩(desc(ptsTotals)))%>%
#按职位排列
分组依据(分组位置)%>%
变异(位置等级=等级(描述(ptsTotals)))%>%
解组()%>%
#条件秩
过滤器(在%c(“G”、“F”)中的组位置%&位置等级>3|
groupPosition==“C”&位置(排名>3)%>%
变异(自定义等级=等级(描述(ptsTotals)))
df_计算
#>#tibble:10 x 23
#>namePlayer组位置分钟总计FGM总计FGA总计FG3总计
#>                                           
#>1英寸~C 1267 353 698 34
#>2英寸~G 1392 336 714 89
#>3英寸~G 1347 335 741 117
#>4英寸~F 114633572 12
#>5英寸~G 1261 331 752 162
#>6英寸~C 1255 330 680 42
#>7英寸~G 1276 324 734 122
#>8英寸~F 1399 383 760 70
#>9英寸~F 1178 340 656 68
#>10英寸~F 1271 332 734 119
#> # ... 再加上17个变量:FG3总计、FG2总计、,
#>#FG2总计、FTM总计、FTA总计、ORB总计、,
#>#DRB总计、TRB总计、AST总计、STL总计、,
#>#BLK总计、TOV总计、pfTotals、ptsTotals、,
#>#o#U级、职位#U级、定制#U级
df_计算正确
#>#tibble:2 x 23
#>namePlayer组位置分钟总计FGM总计FGA总计FG3总计
#>                                          
#>1英寸~G 1392 336 714 89
#>2英寸~F 1146 335 572 12
#> # ... 再加上17个变量:FG3总计、FG2总计、,
#>#FG2总计、FTM总计、FTA总计、ORB总计、,
#>#DRB总计、TRB总计、AST总计、STL总计、,
#>#BLK总计、TOV总计、pfTotals、ptsTotals、,
#>#o#U级、职位#U级、定制#U级

由reprex软件包(v0.2.1)于2019-01-04创建的我无法让您的
df
正确读取,但这种通用方法应该有效

set.seed(1)
df <- data.frame(a = 1:10, b = sample(1:10))

df %>% 
  mutate(custom_rank = {
    filt <- a %in% 3:5
    replace(rep(NA, n()), which(filt), rank(desc(b[filt])))})

#     a  b custom_rank
# 1   1  3          NA
# 2   2  4          NA
# 3   3  5           2
# 4   4  7           1
# 5   5  2           3
# 6   6  8          NA
# 7   7  9          NA
# 8   8  6          NA
# 9   9 10          NA
# 10 10  1          NA
set.seed(1)
df%
变异(自定义等级={

filt无法加载该表,但如果您过滤ptsTotals向量中的正ifelse条件,它应该可以工作:

df %>%
  # Overall Rank
  mutate(o_rank = rank(desc(ptsTotals))) %>%
  # Rank by Position
  group_by(groupPosition) %>%
  mutate(position_rank = rank(desc(ptsTotals))) %>%
  ungroup() %>%
  # Conditional Rank
  mutate(custom_rank = ifelse(groupPosition %in% c("G", "F") & position_rank > 3 |
                                groupPosition =="C" & position_rank > 3,
                              rank(desc(ptsTotals[groupPosition %in% c("G", "F") & position_rank > 3 |
                                                    groupPosition =="C" & position_rank > 3])), NA ))

谢谢。没有内置的dplyr函数?这是不正确的,您不能用这种方式使用
ifelse
。例如,检查
ifelse的结果(1:10%在%3:5,3:5,NA中)
。序列
3:5
不是输出的一部分。您需要使用
替换