首页 > 解决方案 > 四个特定行的子集 tibble

问题描述

我有一个名为 Alabama 的 tibble,有 31 行,我想要一个仅由第 1、11、21、31 行组成的新 tibble。这些行位于名为 Year 的列中,值分别为 1970、1980、1990、2000

我努力了

al_decades <- filter(Alabama, Year==1970 && Year==1980 && Year==1990 && Year==2000)

al_decades <- subset(Alabama, Year==1970 && Year==1980 && Year==1990 && Year==2000)

但都没有奏效。

标签: rselectsubset

解决方案


我们需要%in%而不是==

library(dplyr)
new <- filter(Alabama, Year %in% c(1970, 1980, 1990, 2000))

或者代替&(not &&),用于|检查多个元素,因为“年份”在同一行中不会有不同的年份

new <- filter(Alabama, (Year == 1970)|(Year == 1980)|(Year == 1990)|(Year == 2000))

或者如果我们只对几十年感兴趣,那么另一种选择是

new <- filter(Alabama, Year %%10 == 0)

如果我们知道位置,另一种选择是slice

new <- Alabama %>%
          slice(c(1, 11, 21, 31))

filterrow_number()

new <- Alabama %>%
           filter(row_number() %in% c(1, 11, 21, 31))

或使用data.table

library(data.table)
setDT(Alabama, key = 'Year')[J(c(1970, 1980, 1990, 2000))]

base R,我们可以使用subset

subset(Alabama, Year %in% c(1970, 1980, 1990, 2000))

推荐阅读