R-数据帧到频率表
我在R中有以下数据帧test: 如果我不必存储对象test_2,那也很好,但当我直接导入表时,它会将格式更改为我不喜欢的双向频率表。这能避免吗?我在管道链中找不到一种方法来指定我想要的列的频率: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() %>%
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