[英]Run a function across multiple columns
我正在嘗試清除已提供給我的六十列數據摘錄。 數據的一部分大約是三十列,這些列已作為“是”或“否”值提供,我希望將其轉換為邏輯類型。 因此,它並不是數據框中的每一列,但其中有很多。 我目前正在這樣做:
mtcars %>%
mutate(mpg = as.character(mpg)) %>%
mutate(cyl = as.character(cyl)) %>%
mutate(disp = as.character(disp)) %>%
mutate(hp = as.character(hp))
也就是說,手動更改列表中的每一列。 但這感覺很容易由於缺少復制粘貼或類似內容而出錯。 是否有一個函數可以通過傳遞字段名稱列表來一步完成此操作? 我傾向於默認使用tidyverse函數,盡管如果需要,基數R也可以使用。
這應該是重復的,但現在找不到相關的帖子。
我們可以使用mutate_at
並將功能應用於選定的列
library(dplyr)
mtcars %>% mutate_at(vars(mpg, cyl, disp, hp), as.character)
或者,如果我們將列名稱存儲在稱為cols
向量中,則可以執行
cols <- c("mpg", "cyl", "disp", "hp")
mtcars %>% mutate_at(cols, as.character)
也許您可以使用lapply()
?
lapply(mtcars, as.character)
如果您希望將數據作為數據框:
df = as.data.frame( lapply(mtcars, as.character), stringsAsFactors = F )
> df$mpg
[1] "21" "21" "22.8" "21.4" "18.7" "18.1" "14.3" "24.4" "22.8"
[10] "19.2" "17.8" "16.4" "17.3" "15.2" "10.4" "10.4" "14.7" "32.4"
[19] "30.4" "33.9" "21.5" "15.5" "15.2" "13.3" "19.2" "27.3" "26"
[28] "30.4" "15.8" "19.7" "15" "21.4"
> df$cyl
[1] "6" "6" "4" "6" "8" "6" "8" "4" "4" "6" "6" "8" "8" "8" "8" "8"
[17] "8" "4" "4" "4" "4" "8" "8" "8" "8" "4" "4" "4" "8" "6" "8" "4"
> df$disp
[1] "160" "160" "108" "258" "360" "225" "360" "146.7"
[9] "140.8" "167.6" "167.6" "275.8" "275.8" "275.8" "472" "460"
[17] "440" "78.7" "75.7" "71.1" "120.1" "318" "304" "350"
[25] "400" "79" "120.3" "95.1" "351" "145" "301" "121"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.