簡體   English   中英

R函數返回分組變量的已更改數據

[英]R function that returns altered data for grouped variables

我有一個簡單的示例來說明我的問題:可以說我使用mtcars數據框。 我想通過使用以下功能來更改mtcars$qsec的數據:

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

我要抓住的是我想通過分組mtcars$gearmtcars$cyl使用此功能來更改mtcars$qsec 因此,我想獲得一個數據框或矩陣,該數據框或矩陣為我提供一個包含更改后數據的數據框。 如果數據框僅包含所考慮的三列,那就很好。

您對如何處理此問題有任何建議嗎?

如果您只想更改該列並按其他列進行分組,則可以使用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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM