删除数据帧的某些子集,并修改其他子集

时间:2016-01-13 16:02:32

标签: r dataframe

注意:使用示例数据框进行修改以提高可读性。

假设我有以下数据框df

    GRID FLOW NITER    tau    eta    psi
67     0   87 66001 0.6571 0.9050 0.5947
68     0   87 67001 0.6571 0.9050 0.5947
69     0   87 68001 0.6571 0.9050 0.5947
70     0   87 69001 0.6572 0.9050 0.5947
71     0   87 70001 0.6571 0.9050 0.5947
72     0   87 71001 0.6572 0.9050 0.5947
73     0   87 72001 0.6571 0.9050 0.5947
74     0   87 73001 0.6571 0.9050 0.5947
75     0   87 74001 0.6571 0.9050 0.5947
207    1   87 66001 0.6539 0.9001 0.5886
208    1   87 67001 0.6539 0.9001 0.5886
209    1   87 68001 0.6539 0.9001 0.5886
210    1   87 69001 0.6539 0.9001 0.5886
277    2   87 66001 0.6573 0.9031 0.5935
278    2   87 67001 0.6573 0.9031 0.5935
279    2   87 68001 0.6573 0.9031 0.5935
280    2   87 69001 0.6573 0.9031 0.5935
347    3   87 66001 0.6575 0.9020 0.5930
348    3   87 67001 0.6575 0.9020 0.5930
349    3   87 68001 0.6575 0.9020 0.5930
350    3   87 69001 0.6575 0.9020 0.5930
627    7   87 66001 0.6573 0.9020 0.5929
628    7   87 67001 0.6573 0.9020 0.5929
629    7   87 68001 0.6573 0.9020 0.5929
630    7   87 69001 0.6573 0.9021 0.5929
631    7   87 70001 0.6573 0.9021 0.5929
632    7   87 71001 0.6573 0.9021 0.5929
633    7   87 72001 0.6573 0.9021 0.5929
634    7   87 73001 0.6573 0.9021 0.5929
635    7   87 74001 0.6573 0.9021 0.5929

GRID变量和NITER变量是整数。如您所见,对于GRID的某些值(本例中为1,2和3),NITER的最大值为69001.对于GRID的其他值(0和7)在这个例子中),最大NITER高于69001.对于所有这些组,我需要用NITER< 69001,并将70000减去其他观测值的NITER值。我可以使用for循环执行此操作,但R中的循环速度很慢,因此我更喜欢更R风格的解决方案。

1 个答案:

答案 0 :(得分:1)

dplyr使用链接来提高可读性。如果你完全习惯了SQL,你应该会发现它非常有用。

手册也很好:https://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html

因为我只猜测数据的结构,所以我只能对响应进行伪编码。同样,只有在按GRID进行分组才能让您了解' clumps'您正在尝试调整NITER。

df1 <- df %>% 
       group_by(GRID) %>% 
       mutate(itermax=max(NITER),
              NNITER=ifelse(itermax>69001L, NITER-70000L, NITER),
              keep=NNITER > 0) %>%
       filter(keep) %>%
       select(GRID, FLOW, NNITER, tau, eta, psi)


> as.data.frame(df1)
   GRID FLOW NNITER    tau    eta    psi
1     0   87      1 0.6571 0.9050 0.5947
2     0   87   1001 0.6572 0.9050 0.5947
3     0   87   2001 0.6571 0.9050 0.5947
4     0   87   3001 0.6571 0.9050 0.5947
5     0   87   4001 0.6571 0.9050 0.5947
6     1   87  66001 0.6539 0.9001 0.5886
7     1   87  67001 0.6539 0.9001 0.5886
8     1   87  68001 0.6539 0.9001 0.5886
9     1   87  69001 0.6539 0.9001 0.5886
10    2   87  66001 0.6573 0.9031 0.5935
11    2   87  67001 0.6573 0.9031 0.5935
12    2   87  68001 0.6573 0.9031 0.5935
13    2   87  69001 0.6573 0.9031 0.5935
14    3   87  66001 0.6575 0.9020 0.5930
15    3   87  67001 0.6575 0.9020 0.5930
16    3   87  68001 0.6575 0.9020 0.5930
17    3   87  69001 0.6575 0.9020 0.5930
18    7   87      1 0.6573 0.9021 0.5929
19    7   87   1001 0.6573 0.9021 0.5929
20    7   87   2001 0.6573 0.9021 0.5929
21    7   87   3001 0.6573 0.9021 0.5929
22    7   87   4001 0.6573 0.9021 0.5929