2017-05-04 13 views
6

डेटा प्रकारों के मिश्रण के साथ डेटा.फ्रेम पर विचार करें।सभी कॉलम को डेटा में वर्णों में कनवर्ट करें। फ्रेम

एक अजीब उद्देश्य के लिए, उपयोगकर्ता को सभी कॉलम को वर्णों में परिवर्तित करने की आवश्यकता होती है। यह कैसे किया जाता है? समाधान पर एक tidyverse प्रयास यह है:

map(mtcars,as.character) %>% map_df(as.list) %>% View() 
c2<-map(mtcars,as.character) %>% map_df(as.list) 

जब मैं फोन str(c2) यह एक Tibble या data.frame सभी पात्रों के साथ कहना चाहिए।

अन्य विकल्प परिणामस्वरूप फ़ाइल आउटपुट में एक ही चीज़ प्राप्त करने के लिए write.csv() या write_csv() में कुछ पैरामीटर सेटिंग्स होगी।

उत्तर

13

आप dplyr::mutate_all का भी उपयोग कर सकते हैं।

library(dplyr) 
mtcars %>% 
    mutate_all(as.character) 
2

यह काम कर सकता है, लेकिन यह सुनिश्चित नहीं है कि यह सबसे अच्छा है या नहीं।

df = data.frame(lapply(mtcars, as.character)) 
str(df) 
4

mutate_all और data.frame फिर से कास्टिंग lapply के बाद data.frame के गुणों को बदलने के लिए कारण होगा। आप row.names, लेबल या अंतर्निहित data.frame के साथ जुड़े अन्य विशेषताओं को बनाए रखने की जरूरत है, की कोशिश:

x[, ] <- lapply(x[, ], as.character) 

यह जगह में चरित्र वर्ग के लिए कॉलम धर्मान्तरित data.frame के गुणों को बनाए रखना।

उदाहरण

x <- mtcars 
attr(x, "example") <- "1" 

केवल नीचे पिछले मामले में example विशेषता बरकरार रखा है:

x %>% 
    mutate_all(as.character) %>% 
    attributes() 

data.frame(lapply(x, as.character)) %>% 
    attributes() 

x[, ] <- lapply(x[, ], as.character) 
attributes(x) 
0

लिए सबसे कारगर तरीका

data.table::setDT(mtcars) 
mtcars[, (colnames(mtcars)) := lapply(.SD, as.character), .SDcols = colnames(mtcars)] 
संबंधित मुद्दे