【问题标题】:How to make a probability table based on three columns with dplyr如何使用 dplyr 制作基于三列的概率表
【发布时间】:2021-07-09 11:20:13
【问题描述】:

我有一个看起来像这样的数据,

df <- data.frame(col1=c(0,0,20,20),col2=c(12,20,12,20), fill=c(0,1,1,1))

  col1 col2 fill
1    0   12    0
2    0   20    1
3   20   12    1
4   20   20    1

交互矩阵:Col1 与 Col2,基于 fill=="0"

我的动机是创建一个二分图,我需要 col1 和 col2 之间类型的交互。因此,当 0 与 12 相遇时,遇到 0 的概率是 0.50。当 0 遇到 20 时,遇到零的概率为 0 等。我需要将 col1 的唯一元素和 Col2 的唯一元素作为行

    0    20 
12 0.50  0

20 0     0

非常感谢任何帮助

更新______

如果我使用以下函数,那么我会得到填充 = 0 的所需结果。但是我还不能对 b 表进行子集化以获取我想要的结果,并且我无法使用 dplyr 创建与我想要的相同的结果

df %>% 
  table() %>% 
  prop.table(.,1)

, , fill = 0

    col2
col1  12  20
  0  0.5 0.0
  20 0.0 0.0

, , fill = 1

    col2
col1  12  20
  0  0.0 0.5
  20 0.5 0.5

【问题讨论】:

  • 您可以使用df %&gt;% group_by(col1) %&gt;% summarise(val = mean(fill == 0))。虽然我不确定行名中的 12 和 20 与输出有何关系。
  • 你是对的 Ronak。那是我的坏我需要。我应该解释得更好。我想创建一个二分图,我需要类型的交互。因此,当 0 与 12 相遇时,遇到 0 的概率是 0.50。当0遇到20时,遇到零的概率是0
  • 是的,但是行名 12 和 20 在输出中如何相关。 col1 = 0 只有 1 个值,其中 col2 = 12。我上面的评论对你有用吗?
  • 我明白你的意思。我会尝试更好地澄清。例如,如果我使用这些函数a=table(df) prop.table(a, 1) 在表 1 中,其中 fill=0,我看到了我想要的但我需要转置表。我很难用 dplyr 生成这个
  • “所以,当 0 me[e]ts 12 遇到零的概率是 0.50。当 0 遇到 20 遇到零的概率是 0 等等”背后的逻辑尚不清楚。

标签: r dplyr tidyverse


【解决方案1】:

这可以回答我的问题。非常感谢 Ronak 的 cmets 和帮助

df %>% 
  table() %>% 
  prop.table(.,1) %>% 
  as.data.frame() %>% {
    with(.[.$fill=="0",],table(col2,col1))
  }
     col1
col2 0 20
  12 1  1
  20 1  1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2014-10-22
    • 2019-09-15
    相关资源
    最近更新 更多