【问题标题】:Count occurrences of a value on melted data using dplyr使用 dplyr 计算融化数据上某个值的出现次数
【发布时间】:2023-03-29 20:25:02
【问题描述】:

在拥有melt 我的数据后,我正在尝试做一个简单的table,但使用dplyr

我的数据是这样的

   cluster   21:30   21:45
4        c   alone   alone
6        b       %       %
12       e partner partner
14       b partner partner
20       b   alone   alone
22       c partner partner

有了table我就可以了

table(dta$cluster)
   a b c d e 
   2 8 5 1 4 

如何使用meltsummarise 获得相同的结果?

 library(dplyr)
 library(reshape2)

 dta %>% 
 melt(id.vars = 'cluster')  %>% 
 group_by(cluster) %>% 
 summarise( n() ) 

我真正需要的是table 集群融化数据之后。

所以要正确计算这个data.frame

 dta %>% 
 melt(id.vars = 'cluster')

预期的输出是这个

      cluster variable   value n_cluster
1        a    21:30       .         2
2        a    21:30 nuclear         2
3        a    21:45       .         2
4        a    21:45 nuclear         2
5        b    21:30       %         8
6        b    21:30 partner         8
7        b    21:30   alone         8
8        b    21:30 partner         8
9        b    21:30 partner         8
10       b    21:30 nuclear         8
11       b    21:30 partner         8
12       b    21:30 partner         8
13       b    21:45       %         8
14       b    21:45 partner         8
15       b    21:45   alone         8
16       b    21:45 partner         8
17       b    21:45 partner         8
18       b    21:45 nuclear         8
19       b    21:45 partner         8
20       b    21:45 partner         8
21       c    21:30   alone         5
22       c    21:30 partner         5
23       c    21:30       %         5
24       c    21:30 partner         5
25       c    21:30 partner         5
26       c    21:45   alone         5
27       c    21:45 partner         5
28       c    21:45       %         5
29       c    21:45 partner         5
30       c    21:45 partner         5
31       d    21:30 partner         1
32       d    21:45   alone         1
33       e    21:30 partner         4
34       e    21:30 nuclear         4
35       e    21:30 nuclear         4
36       e    21:30 nuclear         4
37       e    21:45 partner         4
38       e    21:45 nuclear         4
39       e    21:45 nuclear         4
40       e    21:45 nuclear         4

有什么想法吗?

dta = structure(list(cluster = structure(c(3L, 2L, 5L, 2L, 2L, 3L, 
5L, 3L, 1L, 3L, 1L, 2L, 5L, 3L, 2L, 2L, 2L, 2L, 4L, 5L), .Label = c("a", 
"b", "c", "d", "e"), class = "factor"), `21:30` = structure(c(2L, 
7L, 5L, 5L, 2L, 5L, 4L, 7L, 1L, 5L, 4L, 5L, 4L, 5L, 5L, 4L, 5L, 
5L, 5L, 4L), .Label = c(".", "alone", "children", "nuclear", 
"partner", "*", "%"), class = "factor"), `21:45` = structure(c(2L, 
7L, 5L, 5L, 2L, 5L, 4L, 7L, 1L, 5L, 4L, 5L, 4L, 5L, 5L, 4L, 5L, 
5L, 2L, 4L), .Label = c(".", "alone", "children", "nuclear", 
"partner", "*", "%"), class = "factor")), .Names = c("cluster", 
"21:30", "21:45"), row.names = c("4", "6", "12", "14", "20", 
"22", "23", "28", "30", "32", "36", "38", "40", "42", "44", "48", 
"50", "56", "57", "60"), class = "data.frame")

【问题讨论】:

  • 你不需要融化,你有你的答案:dta %>% group_by(cluster) %>% summarise( n() )
  • 如果你已经在使用的话,我想只是 count(dta, cluster)
  • 当我看到“我的数据看起来像这样”时,我的第一反应是使用 read.table 将其放入 R...也许最好简单地使用较小的数据或省略除非前面有明确的head(dta) 调用,否则可能会误导显示。
  • 希望你对 Excel 不认真
  • 上面评论中的 @giacomoV count(dta, cluster) 是对所提出问题的答案...

标签: r dplyr reshape2 melt


【解决方案1】:

我似乎找不到一个好的骗子,但一个简单的dplyr 成语将只使用count

count(dta, cluster)
# Source: local data frame [5 x 2]
# 
#   cluster n
# 1       a 2
# 2       b 8
# 3       c 5
# 4       d 1
# 5       e 4

根据您想要的新输出,您可以将这个结果加入您的融化数据集

dta %>% 
  melt(id.vars = 'cluster')  %>% 
  left_join(., count(dta, cluster)) %>%
  arrange(cluster)
#    cluster variable   value n
# 1        a    21:30       . 2
# 2        a    21:30 nuclear 2
# 3        a    21:45       . 2
# 4        a    21:45 nuclear 2
# 5        b    21:30       % 8
# 6        b    21:30 partner 8
# 7        b    21:30   alone 8
#...

【讨论】:

  • 感谢大卫的帮助!
  • 我实际上意识到结果不是预期的。因为我需要先融化,然后再数。 dta %>% melt(id.vars = 'cluster') %>% count(cluster) 但这并没有给我正确的结果。谢谢。
  • 查看我的编辑,了解如何轻松将此结果与融化的数据集结合起来
  • 感谢您避免我与 Excel 共度一个夜晚! ;)(开玩笑!)
【解决方案2】:

在计算重复观察变量的分布时,应考虑观察次数。

在这个例子中

n_episode = 2 

那么代码就变得简单了

dta %>% 
  melt(id.vars = 'cluster')  %>% 
  group_by(cluster) %>% 
  mutate( n_cluster = n() / n_episode) %>% 
  arrange(cluster)

例如,可以使用此结果 (n_episode) 来计算不同大小组的平均值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多