【问题标题】:how to group character vectors in a data frame in r [duplicate]如何在r中对数据框中的字符向量进行分组[重复]
【发布时间】:2015-10-21 20:16:00
【问题描述】:

我有一个要分组的数据框,以便我可以对每个组进行一些基本统计。但是,由于我用来分组的列是一个字符向量,所以我在完成这项工作的各种尝试中都没有成功。这是一个示例

    Name Value rate
1  SW115    25    3
2  SW115    34    3
3  SW115    25    3
4  SW115    30    3
5  SW115    36    3
6  SW345    32    4
7  SW345    43    4
8  SW345    35    4
9  SW345    24    4
10 SW345    23    4
11 SW445    32    5
12 SW445    33    5
13 SW445    24    5
14 SW445    35    5
15 SW445    25    5

正如我所说,我想按“名称”对其进行分组,并为每个组找到“值”的均值和 cv。因此,在我的示例中,SW115 将是一个组,SW345 将是另一个组,我想知道每个组的平均值、标准差和变异系数。我可以通过子集手动执行此操作,但我正在使用的原始数据有超过 5000 行,大约有 57 个可能的组,手动浏览每个组需要几个小时。我知道必须有一种方法可以通过几行代码来完成它,这样它就可以一次性为每个组提供摘要。

我尝试将“名称”列转换为数字(以便每个组都有一个数字),但我也无法完成。

任何建议将不胜感激

【问题讨论】:

  • Name 是一个字符向量这一事实不应妨碍您按组计算汇总统计信息的能力。你试过什么了? tapply? dplyrdata.table 包?
  • 你试过谷歌吗?网上的例子太多了,比如thisthisthisthisthis,只有上帝知道还有多少
  • @DavidArenburg 整天都在搜索。我想我没有输入合适的句子来引导我找到这些例子。这正是我正在寻找的。谢谢漂亮!
  • @Benjamin 不,但我也会研究这些包。谢谢。

标签: r


【解决方案1】:

使用dplyr,这很简单。

library(dplyr)

x <- [YOUR DATA SET]

x %>%
  group_by(Name) %>%
  dplyr::summarise(mean = mean(Value),
                   sd = sd(Value)) %>%
  mutate(cv = (sd/mean)*100)

【讨论】:

  • 它的魔力非常好。今天才知道“变异”。太棒了!
【解决方案2】:

创建数据:

name <- c(rep("SW115", 5), rep("SW345", 5), rep("SW445", 5))
Value <- c(25,34,25,30,36,32,43,35,24,23,32,33,24,35,25)
rate <- c(rep(3, 5), rep(4, 5), rep(5, 5))
df <- data.frame(name, Value, rate)

这就是你想要的:

aggregate(df[,2:3], list(df$name), mean )
aggregate(df[,2:3], list(df$name), sd )

还有你想要的统计数据。

【讨论】:

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