提取包含另一列的每个唯一值的第一个值的所有行
Extract all rows containing first value for each unique value of another column
我正在寻找类似的东西 Select only the first rows for each unique value of a column in R
但我需要保留包含每个 ID 年份的第一个值的所有行。
换句话说,我需要根据个人 ID 对列出的第一年的数据集进行子集化。 ID 可以有他们的第一个
1 2 或 3 中的年份,并且应保留第一年的所有行。
例如:
ID <- c("54V", "54V", "54V", "54V", "56V", "56V", "56V", "59V", "59V", "59V")
yr <- c(1, 1, 1, 2, 2, 2, 3, 1, 2, 3)
test <- data.frame(ID,yr)
test
ID yr
1 54V 1
2 54V 1
3 54V 1
4 54V 2
5 56V 2
6 56V 2
7 56V 3
8 59V 1
9 59V 2
10 59V 3
预期结果:
ID yr
1 54V 1
2 54V 1
3 54V 1
4 56V 2
5 56V 2
6 59V 1
我的数据集有很多列,我需要保留所有列。
任何有关 R 或 R 中的 sqldf 的说明都有帮助!
我们可以用 dplyr
library(dplyr)
test %>%
group_by(ID) %>%
filter(yr==first(yr))
# ID yr
# <fctr> <dbl>
#1 54V 1
#2 54V 1
#3 54V 1
#4 56V 2
#5 56V 2
#6 59V 1
或使用data.table
library(data.table)
setDT(test)[, .SD[yr==yr[1L]], ID]
或使用base R
test[with(test, as.logical(ave(yr, ID, FUN = function(x) x==x[1L]))),]
我正在寻找类似的东西 Select only the first rows for each unique value of a column in R 但我需要保留包含每个 ID 年份的第一个值的所有行。 换句话说,我需要根据个人 ID 对列出的第一年的数据集进行子集化。 ID 可以有他们的第一个 1 2 或 3 中的年份,并且应保留第一年的所有行。 例如:
ID <- c("54V", "54V", "54V", "54V", "56V", "56V", "56V", "59V", "59V", "59V")
yr <- c(1, 1, 1, 2, 2, 2, 3, 1, 2, 3)
test <- data.frame(ID,yr)
test
ID yr
1 54V 1
2 54V 1
3 54V 1
4 54V 2
5 56V 2
6 56V 2
7 56V 3
8 59V 1
9 59V 2
10 59V 3
预期结果:
ID yr
1 54V 1
2 54V 1
3 54V 1
4 56V 2
5 56V 2
6 59V 1
我的数据集有很多列,我需要保留所有列。 任何有关 R 或 R 中的 sqldf 的说明都有帮助!
我们可以用 dplyr
library(dplyr)
test %>%
group_by(ID) %>%
filter(yr==first(yr))
# ID yr
# <fctr> <dbl>
#1 54V 1
#2 54V 1
#3 54V 1
#4 56V 2
#5 56V 2
#6 59V 1
或使用data.table
library(data.table)
setDT(test)[, .SD[yr==yr[1L]], ID]
或使用base R
test[with(test, as.logical(ave(yr, ID, FUN = function(x) x==x[1L]))),]