2016-04-29 136 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])) 

尝试与一个运行它改变并看看你得到了什么。