R-数据帧到频率表

R-数据帧到频率表,r,dataframe,dplyr,subset,R,Dataframe,Dplyr,Subset,我在R中有以下数据帧test: 如果我不必存储对象test_2,那也很好,但当我直接导入表时,它会将格式更改为我不喜欢的双向频率表。这能避免吗?我在管道链中找不到一种方法来指定我想要的列的频率: test %>% group_by(ID) %>% mutate(nDistColors = n_distinct(Color)) %>% ungroup() %>% as.data.frame() %>%

我在R中有以下数据帧test:

如果我不必存储对象test_2,那也很好,但当我直接导入表时,它会将格式更改为我不喜欢的双向频率表。这能避免吗?我在管道链中找不到一种方法来指定我想要的列的频率:

    test %>% 
     group_by(ID) %>% 
     mutate(nDistColors = n_distinct(Color)) %>% 
     ungroup() %>% 
     as.data.frame() %>% 
     select(ID,nDistColors) %>% 
     distinct() %>% 
      table(useNA = "always")
          nDistColors

    ID     1 2 <NA>
      1    0 1    0
      2    1 0    0
      <NA> 0 0    0


它可以通过总结而不是变异而变得简洁,从而避免了进行区分的步骤。此外,您可以拉取列“n”并在该列上应用表,而不是将输出存储到临时对象


总结就是这样。谢谢-如果不在这里询问,我想不出谷歌能找到什么。我也不知道pull方法。总结一下,没有双关语-1。pull正在指定进入表中的字段?2..groups='drop'做什么?@PrinceM 1。在代码测试中,_2$nDistColors将列提取为向量。pull在“n”摘要栏中也做了同样的事情。2.groups='drop'在这里并不真正需要,因为只有一个组变量,默认情况下它会删除最后一个分组列。但是使用.groups='drop'可以避免意外,并删除那些警告消息,如果您在RMDIs上编写这些消息,可能会产生一些效果。类似于“ungroup”?@PrinceM您可以在这些步骤之后执行ungroup,但它仍然可以显示summary中的警告消息
    > desired_output
    
       1    2 <NA> 
       1    1    0 
    test_2 <- test %>% 
      group_by(ID) %>% 
      mutate(nDistColors = n_distinct(Color)) %>% 
      ungroup() %>% 
      as.data.frame() %>% 
      select(ID,nDistColors) %>% 
      distinct()

    desired_output <- table(test_2$nDistColors, useNA = "always")
      select(ID,nDistColors) %>% 
      distinct()
    test %>% 
     group_by(ID) %>% 
     mutate(nDistColors = n_distinct(Color)) %>% 
     ungroup() %>% 
     as.data.frame() %>% 
     select(ID,nDistColors) %>% 
     distinct() %>% 
      table(useNA = "always")
          nDistColors

    ID     1 2 <NA>
      1    0 1    0
      2    1 0    0
      <NA> 0 0    0

library(dplyr)
test %>% 
    group_by(ID) %>% 
    summarise(n = n_distinct(Color), .groups = 'drop') %>%
    pull(n) %>% 
    table(useNA = 'always')
# 1    2 <NA> 
# 1    1    0