根据其他变量删除行的子集
Deleting a subset of rows based on other variables
我遵循了这个例子Remove last N rows in data frame with the arbitrary number of rows,但它只删除了数据框的最后 50 行,而不是数据框中每个研究站点的最后 50 行。我有一个非常大的数据集,它有多个研究地点,每个研究地点都有多个深度,每个深度都有一个营养浓度。
我只想删除每个站点的最后 50 行深度。
例如
站 1 有 250 深度
站 2 有 1000 深度
站 3 有 150 深度
但保持所有其他数据一致。
这似乎只是从数据帧中删除了最后 50 个,而不是从每个站点中删除了最后 50 个...
df<- df[-seq(nrow(df),nrow(df)-50),]
我应该怎么做才能添加更多变量(研究站点)作为筛选依据?
我们可以使用 dplyr
包中的 slice
函数
df2<-df %>% group_by(Col1) %>% slice(1:(n()-4))
首先,它按类别列分组,如果按正确的顺序排列,它可以从每个类别的数据框中删除最后 n 行(在本例中为 4 行)。
一个潜在的基础 R 解决方案是:
d <- data.frame(station = rep(paste("station", 1:3), c(250, 1000, 150)),
depth = rnorm(250 + 1000 + 150, 100, 10))
d$grp_counter <- do.call("c", lapply(tapply(d$depth, d$station, length), seq_len))
d$grp_length <- rep(tapply(d$depth, d$station, length), tapply(d$depth, d$station, length))
d <- d[d$grp_counter <= (d$grp_length - 50),]
d
# OR w/o auxiliary vars: subset(d, select = -c(grp_counter, grp_length))
我遵循了这个例子Remove last N rows in data frame with the arbitrary number of rows,但它只删除了数据框的最后 50 行,而不是数据框中每个研究站点的最后 50 行。我有一个非常大的数据集,它有多个研究地点,每个研究地点都有多个深度,每个深度都有一个营养浓度。
我只想删除每个站点的最后 50 行深度。
例如 站 1 有 250 深度 站 2 有 1000 深度 站 3 有 150 深度
但保持所有其他数据一致。
这似乎只是从数据帧中删除了最后 50 个,而不是从每个站点中删除了最后 50 个...
df<- df[-seq(nrow(df),nrow(df)-50),]
我应该怎么做才能添加更多变量(研究站点)作为筛选依据?
我们可以使用 dplyr
包中的 slice
函数
df2<-df %>% group_by(Col1) %>% slice(1:(n()-4))
首先,它按类别列分组,如果按正确的顺序排列,它可以从每个类别的数据框中删除最后 n 行(在本例中为 4 行)。
一个潜在的基础 R 解决方案是:
d <- data.frame(station = rep(paste("station", 1:3), c(250, 1000, 150)),
depth = rnorm(250 + 1000 + 150, 100, 10))
d$grp_counter <- do.call("c", lapply(tapply(d$depth, d$station, length), seq_len))
d$grp_length <- rep(tapply(d$depth, d$station, length), tapply(d$depth, d$station, length))
d <- d[d$grp_counter <= (d$grp_length - 50),]
d
# OR w/o auxiliary vars: subset(d, select = -c(grp_counter, grp_length))