断开数据帧中的连接(dplyr、data.table、base r)
感谢迄今为止的回复 我在我的问题上又花了几个小时,我认为最好重新思考我的问题。我不再认为dplyr会起作用。这是我的问题 约束:要求以编程方式访问列名(使用dplyr会产生问题) 首选,但不是必需的:无数据帧拷贝的解决方案 代码设置:断开数据帧中的连接(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 <
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)