簡體   English   中英

將一個非常特殊的函數應用於 R 中數據幀中因子的每個級別

[英]apply a very particular function to a each level of a factor in a dataframe in R

我想了解將這個特定函數應用於我的數據幀時我做錯了什么。

請求的庫是

library(dplyr)
library(magrittr)
library(lubridate)

首先是數據框

t1<-c("2009_01_01 09:00:00","2009_01_01 09:01:00","2009_01_01 09:02:00","2009_01_01 09:03:00","2009_01_01 09:04:00","2009_01_01 09:05:00")
t2<-c("2009_01_01 09:00:00","2009_01_01 09:01:00","2009_01_01 09:02:00")
S1<-cbind("A",t1)
S2<-cbind("B",t2)
datat<-data.frame(rbind(S1,S2))
datat$N<-"NA"
colnames(datat)<-c("trap","time","N")
datat$time<-as.POSIXct(datat$time, "%Y_%m_%d %H:%M:%S",tz="")
listdataset<-split(datat,datat$trap)
trap<-names(listdataset)
listdataset <- lapply(seq_along(listdataset), function(x) as.data.frame(listdataset[[x]]))
names(listdataset)<-trap
list2env(listdataset, envir = .GlobalEnv)

然后是特定的功能(請注意它是由這個社區的成員開發的,遺憾的是我不記得他/她的名字,所以我為沒有提供他/她的工作的正確信用而道歉)這是為單個開發的數據框。 為此特定目的,我對其進行了“輕微”修改(原始版本中的 i 是數據集的名稱)。 event_count <- function(ref_time){ min(i %>% filter(time %within% interval(ref_time - 60*5, ref_time)) %>% nrow, 10) }

我的預期結果是

datat$N<-c(1,2,3,4,5,6,1,2,3)
datat
 trap        time         N
 1    A 2009-01-01 09:00:00 1
 2    A 2009-01-01 09:01:00 2
 3    A 2009-01-01 09:02:00 3
 4    A 2009-01-01 09:03:00 4
 5    A 2009-01-01 09:04:00 5
 6    A 2009-01-01 09:05:00 6
 7    B 2009-01-01 09:00:00 1
 8    B 2009-01-01 09:01:00 2
 9    B 2009-01-01 09:02:00 3

到目前為止,我能夠做的並不是產生預期的結果。

for (i in listdataset) { 
i %<>%   
rowwise() %>% 
mutate(N = event_count(time)) %>% 
arrange(time)
}

i
A tibble: 3 x 3
trap      time                  N
<fct>    <dttm>              <dbl>
1 B     2009-01-01 09:00:00     1
2 B     2009-01-01 09:01:00     2
3 B     2009-01-01 09:02:00     3

我做錯了什么? 任何建議將不勝感激! 我從我的輸出中了解到,只有循環的第二個元素被評估。 如何獲得評估也是第一個元素?

這可以解決您的問題:

event_count <- function(i,ref_time){
  min(i %>% filter(time %within% interval(ref_time - 60*5, ref_time)) %>% nrow, 10)
}

newData <- bind_rows(lapply(listdataset,function(i){i %>%   
    rowwise() %>% 
    mutate(N = event_count(i,time)) %>% 
    arrange(time)}))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM