从数据框中提取(或隔离)'group-wise constant' 列,*使用 dplyr/tidyverse*
Extract (or isolate) 'group-wise constant' columns from a data frame, *using dplyr/tidyverse*
如何使用dplyr/tidyverse从数据框中提取(或隔离_分组常量列,?
这是 Dowle/Hadley 几十年前的问题 here 的更新。较早发布者的示例...
使用 iris 中的一个人为示例(生成一个数据集,其中列在本示例中按组保持不变)
irisX <- iris %>% mutate(
numspec = as.numeric(Species),
numspec2 = numspec*2
)
现在我想生成一个数据集,只保留 Species
、numspec
和 numspec2
列(并且每个列只保留一行)。
而且我不想告诉它这些是哪些列(按组保持不变)——我希望它为我找到这些列。
所以我想要的是
Species, numspec, numspec2
setosa, 1, 2
versicolor, 2, 4
virginica, 3, 6
与较旧的链接问题不同,我想使用 tidyverse 做一些事情,这样我可以更好地理解它并且代码看起来更清晰。
我试过
single_iris <- irisX %>%
group_by(Species) %>%
select_if(function(.) n_distinct(.) == 1)
但后者select_if
忽略分组。
如果我们想使用select
,请在分组外使用
library(dplyr)
irisX %>%
select(where(~ n_distinct(.) == n_distinct(irisX$Species))) %>%
distinct()
你可以这样做:
iris %>%
group_by(Species)%>%
summarise(numspec = as.numeric(first(Species)),
numspec2 = numspec*2)
如何使用dplyr/tidyverse从数据框中提取(或隔离_分组常量列,?
这是 Dowle/Hadley 几十年前的问题 here 的更新。较早发布者的示例...
使用 iris 中的一个人为示例(生成一个数据集,其中列在本示例中按组保持不变)
irisX <- iris %>% mutate(
numspec = as.numeric(Species),
numspec2 = numspec*2
)
现在我想生成一个数据集,只保留 Species
、numspec
和 numspec2
列(并且每个列只保留一行)。
而且我不想告诉它这些是哪些列(按组保持不变)——我希望它为我找到这些列。
所以我想要的是
Species, numspec, numspec2
setosa, 1, 2
versicolor, 2, 4
virginica, 3, 6
与较旧的链接问题不同,我想使用 tidyverse 做一些事情,这样我可以更好地理解它并且代码看起来更清晰。
我试过
single_iris <- irisX %>%
group_by(Species) %>%
select_if(function(.) n_distinct(.) == 1)
但后者select_if
忽略分组。
如果我们想使用select
,请在分组外使用
library(dplyr)
irisX %>%
select(where(~ n_distinct(.) == n_distinct(irisX$Species))) %>%
distinct()
你可以这样做:
iris %>%
group_by(Species)%>%
summarise(numspec = as.numeric(first(Species)),
numspec2 = numspec*2)