【问题标题】:How to look through column names in R and perform operations then store it in a list of unknown row size如何查看 R 中的列名并执行操作,然后将其存储在未知行大小的列表中
【发布时间】:2018-09-08 19:45:02
【问题描述】:

我是一名新的 R 程序员,正在尝试通过大量列创建一个循环,以按某个指标衡量数据。

我有大量变量数据集(一些因素,一些数字)。我想遍历我的列,确定哪个是一个因素,然后如果它是一个因素,我想使用一些 tapply 函数来做一些加权并返回一个平均值。我在这里建立了一个可以一次执行此操作的功能:

weight.by.mean <- function(metric,by,x,funct=sum()){

if(is.factor(x)){
a <- tapply(metric, x, funct)
b <- tapply(by, x, funct)
return (a/b)
} 
}

I am passing in the metric that I want to weigh and the by argument is what 
I am weighting the metric BY. x is simply a factor variable that I would 
like to group by.

示例:我有 5 种甜甜圈类型(我的参数 x),我想查看甜甜圈类型使用的平均面团(我的参数 metric),但我需要用用于该甜甜圈类型的面团的量(参数 by)来称量面团。

换句话说,我试图通过不比其他类型更多地加权不同类型的甜甜圈来避免扭曲我的方式(也许我使用很多普通面团制作上釉甜甜圈,但不要使用太多特殊面团制作奶油馅甜甜圈。我希望这是有道理的!

这是我正在处理的函数,用于遍历包含许多可能不同因素变量的大型数据集,例如我之前示例中的“甜甜圈类型”。它还没有功能,因为我不确定还要添加什么。感谢您为我提供的任何帮助。我使用 R 还不到一个月,所以请记住这一点。

我的最终目标是输出所有这些不同方法的矩阵或数据框,但每个因素可能有 5 到 50 个不同的级别,因此行大小取决于每个因素的级别数。

weight.matrix <- function(df,metric,by,funct=sum()){


  n <- ncol(df) ##Number of columns to iterate through
  ColNames <- as.matrix(names(df))
  OutputMatrix <- matrix(1, ,3,nrow=, ncol=3)

 for(i in 1:n){


 if(is.factor(paste("df$",ColNames[i], sep=""))){
  a[[i]] <- tapply(metric, df[,i], funct)
  b[[i]] <- tapply(by, df[,i], funct)
}
OutputMatrix <- (a[[i]]/b[[i]])
}
}

【问题讨论】:

  • 寻求帮助时,您应该包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出。

标签: r loops if-statement dataframe matrix


【解决方案1】:

如果您的每个因素都有不同的水平,那么使用长数据框而不是宽数据框会更有意义。例如:

Metric      Value        Mean
DonutType   Glazed       3.0
DonutType   Chocolate    5.2
DonutSize   Small        1.2
DonutSize   Medium       2.3
DonutSize   Large        3.6

数据帧不适用于不同长度的向量。如果要将数据存储在数据框中,则需要对其进行组织,以使所有向量长度都相同。 gather()spread()tidyverse 包中的函数,可用于在长数据帧和宽数据帧之间进行转换。

【讨论】:

  • 这正是我想要的可视化效果。我可能有许多不同的指标,因此能够在 3 列上执行此操作,但行数可变,这正是我想要完成的。我会调查那个包。
  • @Coldchain9 如果此答案有帮助,请投票或接受它作为您问题的答案。谢谢!
猜你喜欢
  • 2021-08-19
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 2019-03-06
  • 2019-06-13
相关资源
最近更新 更多