感谢到目前为止的回复。
我已经花了几个小时来处理我的问题,并认为最好重新构思我的问题。我不再认为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)]
输出:
A B C
1: E AA 4
2: M AA 5
3: B AA 6
4: O AA 7
5: I BA 5
6: D BA 6
7: P BA 7
8: U BA 9
9: Q CA 5
10: V CA 5
11: J CA 8
12: X CA 9
rank_tb让我走了一半,注意分组#34; B&#34;保留后,数据帧然后在列&#34; C&#34;通过小组和最后的关系被列#34; A&#34; - &GT;见第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
这是&#34; C&#34;按列分组&#34; B&#34;被&#34; A&#34;。
打破的关系以下是我原来问题的文字,再次感谢您的时间..
是否有一种方法可以使用第二列来破坏dplyr包中row_number等任何排序函数的联系?目前我有:
dat <- data %>%
filter(!is.na(col1)) %>%
group_by(col2) %>%
filter(row_number(col1) == 1)
目前我不确定row_number如何打破col1中的关系,并且想要指定一个单独的col来用来打破关系:
dat <- data %>%
filter(!is.na(col1)) %>%
group_by(col2) %>%
filter(row_number(col1, col3) == 1)
谢谢你
答案 0 :(得分:0)
我实际上不太确定我是否理解你的问题。如果您想要每组的第一行,可以使用
data %>%
group_by(col2) %>%
filter(row_number()==1)