【问题标题】:Pivot and transform df in dplyr在 dplyr 中旋转和转换 df
【发布时间】:2021-11-04 10:25:30
【问题描述】:

我的意见:

df<-data.frame("frame"=c(1,2,3,4,5,6,7,8,9,10),
               "label_x"=c("AO","Other","AO","GS","GS","RF","RF","TI",NA,"Other"),
               "label_y"=c("AO","RF","RF", "GS","GS","Other","Other","TI","AO","RF"),
               "cross"=c("Matched","Mismatched", "Mismatched","Matcehed","Matched"
                         ,"Mismatched", "Mismatched","Mismatched","Mismatched","Mismatched")  )

我想计算列 cross 中每个标签的所有“匹配/不匹配”,用于列 label_xlabel_y(两者)。所以我对每一列都尝试了这段代码label_

 df %>%  filter(!is.na(label_y )) %>%  group_by(label_y) %>% count(cross)

但它没有回答我的问题,之后我需要对每一列的计数求和。 所以我期待这样的事情......:

label  Mismatching Matching Total
AO       5           7         13
RF       3           4          7

【问题讨论】:

  • 有一个错字——“Matcehed”,是故意的吗?

标签: r dataframe dplyr


【解决方案1】:

正在做的路上:

df %>% pivot_longer(cols = c(label_x ,label_y), values_to = "label") %>% 
   group_by(label) %>% count(cross) %>%   
   pivot_wider(values_from = n, names_from = cross, values_fill = 0) %>% 
   mutate(total = Matched + Mismatched)

结果标题:

# A tibble: 6 x 4
# Groups:   label [6]
  label Matched Mismatched total
  <chr>   <int>      <int> <int>
1 AO          2          2     4
2 GS          4          0     4
3 Other       0          4     4
4 RF          0          5     5
5 TI          0          2     2
6 NA          0          1     1

但是,请记住,匹配的数字被高估了,因为 label_x 和 label_y 都被使用了。您能否显示一个包含您期望的真实标签和数字的结果表?

【讨论】:

  • 那个问题,我真不知道数字。我认为高估对我来说是可以的,因为例如在 label_x 和 label_y 中使用了 AO,所以它被“使用”了两次。在按帧连接两个表并检查 label_x 是否与 label_y 相等之后,您会看到原始 df。或者你认为它的计算错误?
  • 如果没有关于上下文的更多信息,我无法回答您的问题。这些数据代表什么,您对这些比赛的目标是什么等。
【解决方案2】:

使用表格

table(data.frame(label = unlist(df[, c("label_x", "label_y")]), 
                 cross = df$cross))
#       cross
#label   Matcehed Matched Mismatched
#  AO           0       2          2
#  GS           2       2          0
#  Other        0       0          4
#  RF           0       0          5
#  TI           0       0          2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-29
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2011-02-24
    • 1970-01-01
    • 2021-07-05
    相关资源
    最近更新 更多