2016-07-08 88 views
1

假設我有一個數據幀等類如何提取STR()信息中的R

df<-data.frame(a=rnorm(20), 
       b=LETTERS[1:20], 
       c=rep(c(FALSE, TRUE), each=10)) 
str(df) 
'data.frame': 20 obs. of 3 variables: 
$ a: num 1.1525 0.0377 -0.2212 -2.6184 -0.3649 ... 
$ b: Factor w/ 20 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ c: logi FALSE FALSE FALSE FALSE FALSE FALSE ... 

我想什麼是提取自str()輸出變量名和它們的類類型:

Names Type 
a  num 
b  Factor 
c  logi 

如何在R中實現這一點?

+2

'lapply(DF,類)'' –

+2

DF2 <-data.frame(名稱=名(DF),類型= sapply(DF,類))' –

+0

是的,我只是打字的同一行@約翰·保羅。 'df2'完全按照你的要求。 –

回答

4

據我所知,str只打印輸出並返回NULL。但是,您可以使用classtypeof命令(取決於所需信息的種類)完成所需的操作。

df <- data.frame(a=rnorm(20), 
        b=LETTERS[1:20], 
        c=rep(c(FALSE, TRUE), each=10)) 
sapply(df, class) 
#   a   b   c 
# "numeric" "factor" "logical" 
sapply(df, typeof) 
#   a   b   c 
# "double" "integer" "logical" 
0

隨着人們從str提取信息中提到的OP,我們可以使用capture.output獲得,作爲一個字符串,然後用sub刪除不需要的子串,並使用read.table轉換vector爲兩列data.frame

read.table(text=sub("\\$\\s+(\\S+)\\s+(\\S+).*", "\\1\\2", 
    trimws(capture.output(str(df))[-1])), sep=":", 
    col.names = c("Names", "Type"), header=FALSE, stringsAsFactors=FALSE) 
# Names Type 
#1  a num 
#2  b Factor 
#3  c logi