我有一个名为Alabama的小标题,有31行,我想要一个仅由第1、11、21、31行组成的新小标题。这些行位于名为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)
但没有一个起作用。
答案 0 :(得分:1)
我们需要%in%
而不是==
library(dplyr)
new <- filter(Alabama, Year %in% c(1970, 1980, 1990, 2000))
或者使用&
来检查多个元素,而不是&&
(不是|
),因为“ Year”在同一行中不会有不同的年份
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))
或将filter
与row_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))