【问题标题】:Using "count" function in a loop in R在 R 的循环中使用“count”函数
【发布时间】:2021-10-16 21:51:40
【问题描述】:

我对 R 很陌生,我一直在学习互联网上的可用资源。 我遇到了这个问题,我有一个带有变量“1”、“2”和“3”的向量 (a)。我想使用 count 函数生成一个新的 df ,其中包含每个变量的类别及其频率。 我想在循环中使用的函数是这个

b <- count(mydata, var1)

但是,当我在下面使用这个循环时;

for (i in (a)) {
    'j' <- count(mydata[, i])
    print (j)
}

循环发生,但保存在 j 上的频率仅属于分类变量“var 3”。 有人可以帮我解决这个代码吗?

TIA!

【问题讨论】:

  • 一般来说,这里的想法不是使用循环,而是将表格转为长格式,按以前的列分组,然后计算结果:mydata %&gt;% pivot_longer(all_of(a), names_to = 'Var', values_to = 'Value') %&gt;% group_by(Var) %&gt;% count(Value)

标签: r function loops variables count


【解决方案1】:

在 R 中,通常有比使用循环处理数据更好的方法。在您的特定情况下,“直截了当”的方式失败了,因为“tidyverse”的想法是将数据保存在tidy format 中(我强烈建议您阅读这篇文章;它有点长,但它的解释对于任何类型来说都是非常基础的数据处理,甚至超出了tidyverse)。但是(从您的代码的角度来看)您的数据分布在多列(宽格式)而不是单列(长格式)中。

另一个问题是count(与许多其他 tidyverse 函数一样)期望未计算的列名。它不接受通过变量的列名。 akrun 的回答展示了如何解决这个问题(使用 tidy 评估和 bang-bang 运算符),但这里不需要这种解决方法。

通常的解决方案不是使用循环,而是首先要求您使用pivot_longer 将数据转换为长格式。

之后,您可以对数据执行单个count

result <- mydata %>%
    pivot_longer(all_of(a), names_to = 'Var', values_to = 'Value') %>%
    count(Var, Value)

关于您当前方法的一些 cmets:

  1. 警惕神秘的变量名称:ija 是什么?使用简洁但描述性的变量名称。有一些约定使用ij,但如果是这样,它们几乎只在向量索引的循环中引用索引变量。因此,以不同方式使用它们会产生很大的误导性。
  2. 通常不需要在 R 中的变量名周围加上括号(除非该名称是函数调用的唯一参数)。也就是说,通常写成for (i in a),而不是for (i in (a))
  3. 不要在变量名周围加上引号! R 恰好接受代码 'j' &lt;- …,但由于引号 通常 表示字符串文字,因此在这里使用它会令人难以置信地误导,而且也没有任何目的。

【讨论】:

    猜你喜欢
    • 2022-10-21
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多