【问题标题】:Using function to obtain the densities of numeric columns in a data frame in R使用函数获取R中数据框中数字列的密度
【发布时间】:2014-12-02 22:14:35
【问题描述】:

我正在尝试获取数据框中数字列的密度并将它们分配给新变量。

我正在使用这个功能,但是当我使用它时,它什么也没有发生。我有点迷路了……你能帮帮我吗?

densities <- function(data.input, dense){
      for(i in 1:ncol(data.input)){
       if(is.numeric(data.input[,i]) == TRUE){
        dense <- density(data.input[, i])
        names(dense) <- paste(c("density"), colnames(data.input)[i], names(data.input), sep = ".")
        return(dense) ## I don't know how to make it return the created variable and have it in the environment
       }else{
         next
       }
       }
      }

如果答案太明显,请见谅

【问题讨论】:

  • if() 测试将始终为 FALSE,就像当前编写的那样。需要将内部右括号移到“==”之前。用==TRUE 进一步测试is. 函数也是多余的,所以不要在脚下射击你的代码。您还需要停止覆盖循环中的值。
  • 还有这个写法,处理完第一个数值列后,函数会返回。
  • 对象density 每次循环都会被替换,你只会得到一个结果,这将是最后一个赋值。

标签: r for-loop environment-variables probability-density


【解决方案1】:

这对你有用吗?

results <- apply(data.input, 2, density)

我刚刚注意到,也许您有一些非数字列,这在这种情况下应该可以工作:

results <- apply(data.input[sapply(data.input, is.numeric)], 2, density)

【讨论】:

  • 谢谢!那将使它...您对如何以自动方式划分“结果”变量有任何想法吗?
  • @JuanC.López-Tavera 取决于你想如何划分它?比如,你想要每列都有一个单独的对象吗?
  • 是的,每列一个单独的对象。
  • @JuanC.López-Tavera 您可以使用如下数字选择它们:results[[1]],如果有帮助的话
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 2015-03-20
  • 2021-11-21
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多