亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

dplyr-muate:使用動態變量名稱

dplyr-muate:使用動態變量名稱

有只小跳蛙 2019-06-19 16:10:43
dplyr-muate:使用動態變量名稱我想用dplyr‘s mutate()若要在數據框架中創建多個新列,請執行以下操作。應該動態生成列名及其內容。來自虹膜的示例數據:require(dplyr)data(iris)iris <- tbl_df(iris)我創建了一個函數來從Petal.Width變量:multipetal <- function(df, n) {     varname <- paste("petal", n , sep=".")     df <- mutate(df, varname = Petal.Width * n)  ## problem arises here     df}現在我創建一個循環來構建我的列:for(i in 2:5) {     iris <- multipetal(df=iris, n=i)}但是,由于muate認為varname是一個字面變量名,所以循環只創建一個新變量(稱為varname),而不是創建4個變量(稱為petal.2-petal.5)。我怎么才能mutate()使用我的動態名稱作為變量名?
查看完整描述

3 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

在新發布的dplyr (0.6.0等待2017年4月),我們也可以完成一項任務(:=)并通過取消引用(!!)不對其進行評估

 library(dplyr)
 multipetalN <- function(df, n){
      varname <- paste0("petal.", n)
      df %>%
         mutate(!!varname := Petal.Width * n)
 }

 data(iris)
 iris1 <- tbl_df(iris)
 iris2 <- tbl_df(iris)
 for(i in 2:5) {
     iris2 <- multipetalN(df=iris2, n=i)
 }

基于@MrFlick的輸出檢查multipetal在“iris 1”上應用

identical(iris1, iris2)#[1] TRUE


查看完整回答
反對 回復 2019-06-19
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

這是另一個版本,可以說更簡單一些。


multipetal <- function(df, n) {

    varname <- paste("petal", n, sep=".")

    df<-mutate_(df, .dots=setNames(paste0("Petal.Width*",n), varname))

    df

}


for(i in 2:5) {

    iris <- multipetal(df=iris, n=i)

}


> head(iris)

Sepal.Length Sepal.Width Petal.Length Petal.Width Species petal.2 petal.3 petal.4 petal.5

1          5.1         3.5          1.4         0.2  setosa     0.4     0.6     0.8       1

2          4.9         3.0          1.4         0.2  setosa     0.4     0.6     0.8       1

3          4.7         3.2          1.3         0.2  setosa     0.4     0.6     0.8       1

4          4.6         3.1          1.5         0.2  setosa     0.4     0.6     0.8       1

5          5.0         3.6          1.4         0.2  setosa     0.4     0.6     0.8       1

6          5.4         3.9          1.7         0.4  setosa     0.8     1.2     1.6       2


查看完整回答
反對 回復 2019-06-19
  • 3 回答
  • 0 關注
  • 850 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號