断开数据帧中的连接(dplyr、data.table、base r)

断开数据帧中的连接(dplyr、data.table、base r),r,sorting,data.table,dplyr,R,Sorting,Data.table,Dplyr,感谢迄今为止的回复 我在我的问题上又花了几个小时,我认为最好重新思考我的问题。我不再认为dplyr会起作用。这是我的问题 约束:要求以编程方式访问列名(使用dplyr会产生问题) 首选,但不是必需的:无数据帧拷贝的解决方案 代码设置: set.seed(11) N <- 12 A <- sample(LETTERS, N, replace=FALSE) B <- c( rep(c("AA"), 4), rep(c("BA"), 4),rep(c("CA"), 4)) C <

感谢迄今为止的回复

我在我的问题上又花了几个小时,我认为最好重新思考我的问题。我不再认为dplyr会起作用。这是我的问题

约束:要求以编程方式访问列名(使用dplyr会产生问题)

首选,但不是必需的:无数据帧拷贝的解决方案

代码设置:

set.seed(11)
N <- 12
A <- sample(LETTERS, N, replace=FALSE)
B <- c( rep(c("AA"), 4), rep(c("BA"), 4),rep(c("CA"), 4))
C <- sample(4:10, N, replace=TRUE)

df <- as.data.frame(cbind(A,B,C))
dt <- as.data.table(df)

rank_tb <- dt[order(B,C,A)]
rank_tb让我走到了一半,注意“B”列上的分组被保留,然后数据帧在“C”列上按组排序,最后通过“A”列断开连接->参见第9行和第10行。最后,我想补充以下内容:

    A B  C rank
1:  E AA 4 1
2:  M AA 5 2
3:  B AA 6 3
4:  O AA 7 4
5:  I BA 5 1
6:  D BA 6 2
7:  P BA 7 3
8:  U BA 9 4
9:  Q CA 5 1
10: V CA 5 2
11: J CA 8 3
12: X CA 9 4
这是“C”上的一个排名列,按“B”列分组,按“a”分隔

下面是我原始问题的文本,再次感谢您的时间

是否有一种方法可以使用第二列从dplyr包中的任何排序函数(如row_number)断开联系?目前我有:

dat <- data %>% 
filter(!is.na(col1)) %>%
group_by(col2) %>%
filter(row_number(col1) == 1)
dat%
过滤器(!is.na(col1))%>%
分组依据(col2)%>%
过滤器(行数(col1)=1)
目前,我不确定row_number如何断开col1中的连接,我想指定一个单独的col用于断开连接:

dat <- data %>% 
filter(!is.na(col1)) %>%
group_by(col2) %>%
filter(row_number(col1, col3) == 1)
dat%
过滤器(!is.na(col1))%>%
分组依据(col2)%>%
过滤器(行数(col1,col3)==1)

非常感谢

事实上,我不太确定我是否理解你的问题。如果想要每组的第一行,可以使用

data %>% 
group_by(col2) %>%
filter(row_number()==1)

您是否查看了
?行号
帮助页面?这个函数只需要一个参数,所以如果你想改变行的顺序,你可能首先想<代码>排列()/代码>(排序)你的组。你只想要每组的第一行吗?请考虑提供一个可重复的例子,你的数据集只有几行。我宁愿使用<代码>切片(1)。那样的话。谢谢你打开
切片。但是,请注意,
slice
可能无法用于数据库。
data %>% 
group_by(col2) %>%
filter(row_number()==1)