2016-04-29 176 views
1

我需要運行一個大型數據框,並提取一個具有數值類型變量名稱的向量。檢索數值變量的變量名

我已經卡在我的代碼中,也許有人可以指向我的解決方案。

這是我多遠了:

numericVarNames <- function(df) { 
    numeric_vars<-c() 
    for (i in colnames(df)) { 
     if (is.numeric(df[i])) { 
      numeric_vars <- c(numeric_vars, colnames(df)[i]) 
      message(numeric_vars[i]) 
     } 
    } 
    return(numeric_vars) 
} 

運行它

teste <-numericVarNames(semWellComb) 

的is.numeric說法是行不通的。我的語法用於捕獲每列的類型是有問題的。哪裏不對?

回答

3

,而不是一個循環功能,怎麼樣

df <- data.frame(a = c(1,2,3), 
       b = c("a","b","c"), 
       c = c(4,5,6)) 


## names(df)[sapply(df, class) == "numeric"] 
## updated to be 'safer' 
names(df)[sapply(df, is.numeric)] 
[1] "a" "c" 
## As variables can have multiple classes 

This question是值得一讀

+0

你把10行變成了一行!這非常有用。謝謝! –

+0

@路易斯 - 沒問題。只是要小心你是否想'數字'/'整數',並瞭解'class','typeof'等之間的差異等。 – SymbolixAU

+1

好的答案。你可以這樣做:'name(df)[sapply(df,is.numeric)]' – Gopala

1

沒有測試數據很難確定,但它看起來像有隻是一個「語法」的問題在你的代碼中。

您寫道:

  numeric_vars <- c(numeric_vars, colnames(df)[i]) 

獲得列名到拼接列表的方式是包括整個提到在括號子集:

 numeric_vars <- c(numeric_vars, colnames(df[i])) 

嘗試與一個運行它改變並看看你得到了什麼。