我有一个简单的例子来解释我的问题:假设我使用mtcars数据帧。我想通过使用以下函数来更改mtcars$qsec
的数据:
TT.test <- function(x)
{
x<- ifelse(x > 20,x,NA)
return(x)
}
我想通过对mtcars$qsec
和mtcars$gear
进行分组来使用此功能更改mtcars$cyl
。所以我想得到一个数据帧或矩阵,它给我一个带有改变数据的数据帧。如果数据帧仅包含所考虑的三列,则可以。
您对如何处理此问题有任何建议吗?
答案 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))