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

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

一次轉換數據框的多個列的類型

一次轉換數據框的多個列的類型

月關寶盒 2019-12-27 15:30:03
我似乎花了很多時間從文件,數據庫或其他東西創建一個數據框,然后將每一列轉換成我想要的類型(數字,因子,字符等)。有沒有一種方法可以一步一步做到這一點,可能是通過提供類型向量來實現的?foo<-data.frame(x=c(1:10),                 y=c("red", "red", "red", "blue", "blue",                     "blue", "yellow", "yellow", "yellow",                     "green"),                z=Sys.Date()+c(1:10))foo$x<-as.character(foo$x)foo$y<-as.character(foo$y)foo$z<-as.numeric(foo$z)而不是最后三個命令,我想做類似的事情foo<-convert.magic(foo, c(character, character, numeric))
查看完整描述

3 回答

?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

我對Brandon的回答的評論switch如下:


convert.magic <- function(obj,types){

    for (i in 1:length(obj)){

        FUN <- switch(types[i],character = as.character, 

                                   numeric = as.numeric, 

                                   factor = as.factor)

        obj[,i] <- FUN(obj[,i])

    }

    obj

}


out <- convert.magic(foo,c('character','character','numeric'))

> str(out)

'data.frame':   10 obs. of  3 variables:

 $ x: chr  "1" "2" "3" "4" ...

 $ y: chr  "red" "red" "red" "blue" ...

 $ z: num  15254 15255 15256 15257 15258 ...

對于真正的大數據幀,您可能要使用lapply而不是for循環:


convert.magic1 <- function(obj,types){

    out <- lapply(1:length(obj),FUN = function(i){FUN1 <- switch(types[i],character = as.character,numeric = as.numeric,factor = as.factor); FUN1(obj[,i])})

    names(out) <- colnames(obj)

    as.data.frame(out,stringsAsFactors = FALSE)

}

執行此操作時,請注意R中強制數據的一些復雜性。例如,從因數轉換為數值通常涉及as.numeric(as.character(...))。此外,要注意data.frame()和as.data.frame()S轉換性格因素的默認行為。


查看完整回答
反對 回復 2019-12-27
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

我知道我回答的時間很晚,但是將循環和屬性函數一起使用是解決問題的簡單方法。


names <- c("x", "y", "z")

chclass <- c("character", "character", "numeric")


for (i in (1:length(names))) {

  attributes(foo[, names[i]])$class <- chclass[i]

}


查看完整回答
反對 回復 2019-12-27
  • 3 回答
  • 0 關注
  • 816 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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