使用双循环Continuation在R中创建子集

时间:2015-02-07 22:02:48

标签: r conditional subset

DF:

1901年1901 1903 1968 1978 2002 2006 2010

种1 1 2 65 1 82 3 1

lat:49 46 47 47 48 43.1 44.23 47.11

长:-79.22 -79.5 -78.22 -79.84 -78.11 -77.114 -76.33 -76.2

Julian_Day:79 125 165 178 193 68 90 230

土地:16 24 25 30 34 34 39 41

还有更多变量,但这是矩阵的一个例子。我只想保留每年的行数以及每个具有Julian_day最低值的物种。即:这里将省略第二行,因为1901年物种1的79小于125.

1 个答案:

答案 0 :(得分:1)

首先。我建议您以易于人们使用的格式提供data.frame。我们将能够更好,更快地帮助您

 df  <- structure(list(Year  = c(1901,  1901, 1903,  1968, 1978,
 2002, 2006, 2010), species = c(1, 1, 2, 65, 1, 82, 3, 1), lat =
 c(49,  46, 47,  47, 48,  43.1, 44.23,  47.11), long  = c(79.22,
 -79.5,  -78.22,   -79.84,  -78.11,  -77.114,   -76.33,  -76.2),
 Julian_Day =  c(79, 125, 165,  178, 193,  68, 90, 230),  Land =
 c(16,   24,   25,   30,   34,    34,   39,   41)),   .Names   =
 c("Year",  "species",  "lat",  "long",  "Julian_Day",  "Land"),
 row.names = c(NA, -8L), class = "data.frame")

这是您的data.frame

 df
 #   Year species   lat    long Julian_Day Land
 #1: 1901       1 49.00  79.220         79   16
 #2: 1901       1 46.00 -79.500        125   24
 #3: 1903       2 47.00 -78.220        165   25
 #4: 1968      65 47.00 -79.840        178   30
 #5: 1978       1 48.00 -78.110        193   34
 #6: 2002      82 43.10 -77.114         68   34
 #7: 2006       3 44.23 -76.330         90   39
 #8: 2010       1 47.11 -76.200        230   41

通常情况下,您只需dput(head(your dataframe))但是如果无法透露您的数据,您可以构建一个小的假数据框来说明您的观点。

她是使用data.table

的可能解决方案
library(data.table)
setDT(df)[ ,.SD[which.min(Julian_Day)], .(species, Year)]