R函数返回分组变量的更改数据

时间:2016-01-06 21:59:02

标签: r function dataframe

我有一个简单的例子来解释我的问题:假设我使用mtcars数据帧。我想通过使用以下函数来更改mtcars$qsec的数据:

TT.test <- function(x)
{
  x<- ifelse(x > 20,x,NA)
  return(x)
}

我想通过对mtcars$qsecmtcars$gear进行分组来使用此功能更改mtcars$cyl。所以我想得到一个数据帧或矩阵,它给我一个带有改变数据的数据帧。如果数据帧仅包含所考虑的三列,则可以。

您对如何处理此问题有任何建议吗?

1 个答案:

答案 0 :(得分:1)

如果你想改变那一列,并由其他人分组,那么你可以用dplyr来做这件事:

library(dplyr)
mtcars %>% group_by(gear, cyl) %>% mutate(qsec = TT.test(qsec))

以下是结果输出:

Source: local data frame [32 x 11]
Groups: gear, cyl [8]

     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
1   21.0     6 160.0   110  3.90 2.620    NA     0     1     4     4
2   21.0     6 160.0   110  3.90 2.875    NA     0     1     4     4
3   22.8     4 108.0    93  3.85 2.320    NA     1     1     4     1
4   21.4     6 258.0   110  3.08 3.215    NA     1     0     3     1
5   18.7     8 360.0   175  3.15 3.440    NA     0     0     3     2
6   18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1
7   14.3     8 360.0   245  3.21 3.570    NA     0     0     3     4
8   24.4     4 146.7    62  3.69 3.190    NA     1     0     4     2
9   22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2
10  19.2     6 167.6   123  3.92 3.440    NA     1     0     4     4
..   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...

如果要改变所有列,可以执行以下操作:

mtcars %>% group_by(gear, cyl) %>% mutate_each(funs(TT.test))

或者,如果你想改变一些选择列(多个),你可以这样做:

mtcars %>% group_by(gear, cyl) %>% mutate_each(funs(TT.test), c(qsec, hp))