本教程描述了R中如何計(jì)算和添加新的變量到一個(gè)數(shù)據(jù)框.你將學(xué)習(xí)dplyr R包以下R函數(shù):
mutate(): 計(jì)算并向數(shù)據(jù)表中添加新變量舀射。它保留了現(xiàn)有的變量冲泥。
transmute(): 計(jì)算新列驹碍,但刪除現(xiàn)有變量。
我們還將提供mutate()和transmute()的三種變體凡恍,以便同時(shí)修改多個(gè)列:
mutate_all() /?transmute_all(): 對(duì)數(shù)據(jù)框中的每一列應(yīng)用一個(gè)函數(shù)
mutate_at() /?transmute_at(): 將函數(shù)應(yīng)用于用字符向量選定的特定列
mutate_if() /?transmute_if(): 將一個(gè)函數(shù)應(yīng)用于返回TRUE的函數(shù)所選擇的列志秃。
library(tidyverse)
my_data <- as_tibble(iris)
my_data
mutate: 通過(guò)保留現(xiàn)有變量來(lái)添加新變量
添加新列 (sepal_by_petal_*):
my_data %>%
? mutate(sepal_by_petal_l = Sepal.Length/Petal.Length)
transmute: 通過(guò)刪除現(xiàn)有變量來(lái)創(chuàng)建新變量
添加新列 (sepal_by_petal_*),并刪除現(xiàn)有列:
my_data %>%? transmute(sepal_by_petal_l = Sepal.Length/Petal.Length,? ?sepal_by_petal_w = Sepal.Width/Petal.Width)
一次修改多個(gè)列
我們首先創(chuàng)建一個(gè)演示數(shù)據(jù)集my_data2嚼酝,它只包含數(shù)字列浮还。為此,我們將刪除列物種
my_data2 <- my_data %>%? select(-Species)
函數(shù) mutate_all()?/?transmute_all(),? mutate_at()?/?transmute_at()?和mutate_if()?/?transmute_if()?可用于一次修改多個(gè)列革半。
函數(shù)簡(jiǎn)要形式如下所示:
# Mutate variants
mutate_all(.tbl, .funs,...)
mutate_if(.tbl, .predicate, .funs,...)
mutate_at(.tbl, .vars, .funs,...)
# Transmute variants
transmute_all(.tbl, .funs,...)
transmute_if(.tbl, .predicate, .funs,...)
transmute_at(.tbl, .vars, .funs,...)
.tbl: tbl 數(shù)據(jù)框
.funs: List of function calls generated by?funs(), or a character vector of function names, or simply a function.由funs()碑定、函數(shù)名的字符向量或簡(jiǎn)單的函數(shù)生成的函數(shù)調(diào)用列表流码。
…: funs中函數(shù)調(diào)用的附加參數(shù)又官。
.predicate: A predicate function to be applied to the columns or a logical vector. The variables for which .predicate is or returns TRUE are selected.
轉(zhuǎn)換所有列
#Divide all columns value by 2.54:
my_data2 %>%? mutate_all(funs(./2.54))
注意,點(diǎn)“.” 表示所有任意變量漫试。
如果.funs有多個(gè)名稱或多個(gè)輸入六敬,函數(shù)名將被附加到列名中:
my_data2 %>%? mutate_all(funs(cm = ./2.54))
注意,輸出變量名現(xiàn)在包含了函數(shù)名驾荣。
轉(zhuǎn)換特定的列
mutate_at(): 轉(zhuǎn)換按名稱選擇的特定列:
my_data2 %>%? mutate_at( c("Sepal.Length","Petal.Width"), funs(cm = ./2.54)? ? )
mutate_if(): transform specific columns selected by a predicate function.
mutate_if()?在將變量從一種類型轉(zhuǎn)換為另一種類型時(shí)特別有用外构。
my_data %>% mutate_if(is.factor, as.character)
所有數(shù)值變量四舍五入:
my_data %>% mutate_if(is.numeric, round, digits =0)
Summary
本文描述了如何使用dplyr函數(shù)向數(shù)據(jù)框架中添加新的變量列:mutate()普泡、transmute()
mutate(iris, sepal = 2*Sepal.Length): Computes and appends new variable(s).
transmute(iris, sepal = 2*Sepal.Length): Makes new variable(s) and drops existing ones.