r语言 - 每组突变,然后取消分组



已编辑

我有一个 data.frame,我想按某些列分组(就在下面y),在每个组中选择不同的行(w.r.t.yz下面),然后添加一个指定每组列数的新列。然后取消分组以返回到 data.frame,包括新列。

例:

df <- data.frame(x=c(1,2,3,4),y=c(10,10,10,20),z=c(100,100,101,200))
x y  z   
1 10 100 
2 10 100 
3 10 101 
4 20 200 

我想接收数据帧:

x y  z   n
1 10 100 2
3 10 101 2
4 20 200 1

前两行具有n=2,因为两者都具有相同的y但不同的z值。

我想你可以在data.table中作为替代方案

library(data.table)
setDT(df)
df[,.(n := .GPR ), y]

但我想你想要的结果可以通过以下方式收到

df[,.(n := .GPR ), .(y,z)]

在这种情况下,您可以将以下内容与dplyr一起使用:

df %>% distinct(y,z,.keep_all=TRUE) %>% add_count(y)

然而,x的独特性是值得怀疑的,因为distinct可能并不总是采取"正确"的行。distinct编写的帮助说明

如果给定的输入组合有多个行,则仅保留第一行。如果省略,将使用所有变量。

但在这里,它显然占据了最后一排。

我们可以使用slice_head

library(dplyr)
df  %>%
group_by(y, z) %>% 
mutate(n = n()) %>% 
slice_head(n = 1)
# A tibble: 3 x 4
# Groups:   y, z [3]
#      x     y     z     n
#  <dbl> <dbl> <dbl> <int>
#1     1    10   100     2
#2     3    10   101     1
#3     4    20   200     1

最新更新