R按2组求最小x
每个R按2组求最小x,r,loops,data.table,R,Loops,Data.table,每个年度内每个站点ID的最小DSSite\u Dis是多少 我试过: ds_DT <- ds_fish[ , .SD[which.min(DSSite_Dis)], by = c("SiteID", "year")] ds_DTSiteID和year的长度没有区别。很可能,ds\u fish[,uniqueN(SiteID)]与ds\u fish[,uniqueN(year)]不同,但由于ds\u fish是一种数据。表,必须是长度(ds\u fi
年度内每个站点ID
的最小DSSite\u Dis
是多少
我试过:
ds_DT <- ds_fish[ , .SD[which.min(DSSite_Dis)], by = c("SiteID", "year")]
ds_DTSiteID
和year
的长度没有区别。很可能,ds\u fish[,uniqueN(SiteID)]
与ds\u fish[,uniqueN(year)]
不同,但由于ds\u fish
是一种数据。表
,必须是长度(ds\u fish$SiteID)=长度(ds\u fish$year)
(反过来,两者都等于nrow(ds\u fish)
)
您提供的代码与您想要的非常接近。以下是您想要的:
ds_fish[ , .(min_site_dis = min(DSSite_Dis)), by = .(SiteID, year)]
您所做的是返回每个最小值DSSite\u Dis
的完整观察值——这将不仅返回最小值DSSite\u Dis
,还返回与这些最小值对应的行中剩余列的值
一个供您仔细思考的概念性说明——您将您所追求的措辞为“每个站点ID在每个年度内的最小DSSite\u Dis
”;您应该说服自己,这与每个SiteID
SiteID
和year
中每个year
的最小Dis
长度相同。很可能,ds\u fish[,uniqueN(SiteID)]
与ds\u fish[,uniqueN(year)]
不同,但由于ds\u fish
是一种数据。表
,必须是长度(ds\u fish$SiteID)=长度(ds\u fish$year)
(反过来,两者都等于nrow(ds\u fish)
)
您提供的代码与您想要的非常接近。以下是您想要的:
ds_fish[ , .(min_site_dis = min(DSSite_Dis)), by = .(SiteID, year)]
您所做的是返回每个最小值DSSite\u Dis
的完整观察值——这将不仅返回最小值DSSite\u Dis
,还返回与这些最小值对应的行中剩余列的值
一个供您仔细思考的概念性说明——您将您所追求的措辞为“每个站点ID在每个年度内的最小DSSite\u Dis
”;您应该说服自己,这与每个SiteID
原始代码中每个年份的最低Dis
相同
这是全部的
library(foreign)
library(data.table)
file <- 'DownstreamSites.dbf' # ds_fish dbf
ds_fish <- read.dbf(file, as.is = FALSE)
file <- 'UpstreamSites.dbf' # nearest_us_fish dbf
us_fish <- read.dbf(file, as.is = FALSE)
file <- 'barriers.dbf' # barriers dbf
barriers <- read.dbf(file, as.is = FALSE)
file <- 'metrics.dbf' # barriers dbf
metrics <- read.dbf(file, as.is = FALSE)
metrics <- metrics[c(-1:-3,-8:-34,-41,-42,-45:-47,-49:-52)]
colnames(metrics)[13] <- "DSSite_ID"
ds_fish1 <- merge(metrics, ds_fish, by = 'DSSite_ID')
colnames(metrics)[13] <- "USSite_ID"
us_fish1 <- merge(metrics, us_fish, by = 'USSite_ID')
year <- format(as.Date(us_fish1$event_date, format="%d/%m/%Y"),"%Y")
us_fish1$year <- year
year <- format(as.Date(ds_fish1$event_date, format="%d/%m/%Y"),"%Y")
ds_fish1$year <- year
ds_fish2 <- data.table(ds_fish1)
us_fish2 <- data.table(us_fish1)
ds_DT <- ds_fish2[ , .SD[which.min(DSSite_Dis)], by = c("SiteID", "year")]
us_DT <- us_fish2[ , .SD[which.min(USSite_Dis)], by = c("SiteID", "year")]
库(外文)
库(数据表)
文件原始代码现在可以工作了
这是全部的
library(foreign)
library(data.table)
file <- 'DownstreamSites.dbf' # ds_fish dbf
ds_fish <- read.dbf(file, as.is = FALSE)
file <- 'UpstreamSites.dbf' # nearest_us_fish dbf
us_fish <- read.dbf(file, as.is = FALSE)
file <- 'barriers.dbf' # barriers dbf
barriers <- read.dbf(file, as.is = FALSE)
file <- 'metrics.dbf' # barriers dbf
metrics <- read.dbf(file, as.is = FALSE)
metrics <- metrics[c(-1:-3,-8:-34,-41,-42,-45:-47,-49:-52)]
colnames(metrics)[13] <- "DSSite_ID"
ds_fish1 <- merge(metrics, ds_fish, by = 'DSSite_ID')
colnames(metrics)[13] <- "USSite_ID"
us_fish1 <- merge(metrics, us_fish, by = 'USSite_ID')
year <- format(as.Date(us_fish1$event_date, format="%d/%m/%Y"),"%Y")
us_fish1$year <- year
year <- format(as.Date(ds_fish1$event_date, format="%d/%m/%Y"),"%Y")
ds_fish1$year <- year
ds_fish2 <- data.table(ds_fish1)
us_fish2 <- data.table(us_fish1)
ds_DT <- ds_fish2[ , .SD[which.min(DSSite_Dis)], by = c("SiteID", "year")]
us_DT <- us_fish2[ , .SD[which.min(USSite_Dis)], by = c("SiteID", "year")]
库(外文)
库(数据表)
您应该为该输入提供样本输入和所需输出,以便测试和验证可能的解决方案。您应该为该输入提供样本输入和所需输出,以便测试和验证可能的解决方案。