【问题标题】:Calculate mode for multiple columns within multiple dataframes and store计算多个数据框中多列的模式并存储
【发布时间】:2013-11-01 23:29:14
【问题描述】:

我有限的心智能力意味着我真的很难在 R 中执行以下任务,任何建议都将不胜感激!

我目前有 100 个数据帧存储为列表 (my.dfs)。在每个数据框中有六列(a、b、c、d、e、f)。数据帧(80-150)之间的行数不同,但我认为这无关紧要。所有列都是数字。

我想计算数据帧 1 中 a 列的模式,然后计算数据帧 2、3、4... 到数据帧 100,并将结果存储在新向量 (a.mode) 中。所以 a.mode 应该有 100 个模式值,每个值都来自一个数据帧。然后,我希望对列 b、c、d、e、f 重复此操作,每个列都可以有自己的向量(b.mode、c.mode 等)。

我的问题是 R 中的计算模式似乎并不简单。我使用包(modeest)和命令:

mlv(column.here, method="mfv")

所以我的代码目前看起来像这样:

library(modeest)
my.dfs
a.mode<-NULL

for( j in my.dfs){
a.mode<-c(a.mode, mlv(j[,"column.a"], method="mfv"))
}

然而,这会产生不正确的混乱输出。

我也尝试过:

for( j in my.dfs){
a.mode<-c(a.mode, mlv(j$column.a, method="mfv"))
} 

但我得到错误命令:

Error in j$column.a : $ operator is invalid for atomic vectors

我还尝试将我的列表分成 100 个单独的数据帧,以查看在单独的数据帧上运行循环是否会更有效。但是,除了将我的列表分成 100 个数据框之外,我还没有超越:

t<-1:100
for (q in 1:length(t)){
assign(paste("metric.data", t[q], sep=""), data.frame(subset(my.dfs[[q]])))
}

我不知道如何另外运行一个循环遍历所有 100 个数据帧,计算每个数据帧中 column.a 的模式并将它们存储在向量 (a.mode) 中,然后对 column.b 重复此操作, column.c 等如上所述。

任何想法和代码都会很棒

【问题讨论】:

    标签: r loops mode


    【解决方案1】:

    您的代码有几个问题:

    1. 应该是for (j in 1:my.dfs) {...},否则循环只会循环一次,因为j 不会采用1my.dfs 之间的所有值。

    2. 到底什么是my.dfs?看起来你根本没有为它分配任何东西?如果您希望循环的运行次数与列表 my.dfs 中的数据帧数量一样多(假设它是 dfs 列表),您应该尝试 runs &lt;- length(my.dfs)for (j in 1:runs) {...}

    3. 您对j 的使用很可能是此处错误消息的原因。看起来您正在尝试使用 j 作为 my.dfs 中元素的占位符,但它不是那样工作的。相反,您应该这样做:mlv(my.dfs[[j]],method="mfv")。同样,错误消息告诉您j 是一个原子向量。它不包含您的数据框。据我可以正确解释,看看你的代码,它甚至不应该包含一个原子向量,而是一个列表(再次假设my.dfs 是一个dfs列表)。

      李>
    4. 还有一些其他问题,我建议,下次您提出问题时,请确保您的代码是正确的和/或不仅仅是伪代码,因为这会使您的问题非常混乱。

    如果我正确解释了您的代码背后的实际问题,那么您的问题是 mlv 的输出实际上是一个列表而不是单个值。如果你想要单个值,你可以像这样访问它:

    my.data <- matrix(rnorm(1:10,5),byrow=F,nrow=10,ncol=5) # create example data
    list.of.modes <- apply(my.data,2,mlv,method="mfv") # get the mode
    vector.of.modes <- NULL # create the vector we want
    for (i in 1:length(list.of.modes)) {
      vector.of.modes[i] <- list.of.modes[[i]]$M #<---This is the interesting line
    }
    

    这对于数据框和您的示例应该同样适用。不过,您必须对其进行调整,因为我发布的代码仅在必要时解释其背后的原理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      相关资源
      最近更新 更多