2015-02-07 1 views
0

다음을 포함하는 데이터 프레임의 한 행을 기반으로 한 동물의 매주 발생 이력을 포함하는 새 데이터 프레임을 생성하려고합니다. 동물 ID (BandNo) 첫 번째와 마지막 날 우리가 그것을 추적 (FDay, Lday), 그리고 동물의 운명을 추적했을 때 (운명)뿐만 아니라 다른 공변량. 여기 lapply에서 새 데이터 프레임 생성 및 채우기 - "x를 POSIXlt 클래스로 변환하는 방법을 모름"

한 개인, 개체에 대한 예를 들어, 데이터 프레임 "A"

structure(list(BandNo = structure(1L, .Label = c("1234", "4201", 
"4203", "4205", "4207", "4208", "4209", "4213", "4214", "4215", 
"4216", "4217", "4219", "4221", "4223", "4224", "4226", "4227", 
"4228", "4229", "4230", "4231", "4232", "4233", "4234", "4236", 
"4237", "4238", "4239", "4241", "4242", "4245", "4247", "4248", 
"4249", "4253", "4254", "4256", "4257", "4258", "4259", "4261", 
"4262", "4263", "4264", "4271", "4272", "4273", "4276", "4277", 
"4280", "4282", "4284", "4288", "4289", "4292", "4293", "4296", 
"4298", "4299", "4501", "4502", "4503", "4504", "4505", "4507", 
"4508", "4509", "4510", "4511", "4512", "4513", "4514", "4515", 
"4516", "4517", "4518", "4519", "4520", "4521", "4525", "4526", 
"4527", "4529", "4530", "4532", "4535", "4539", "4596", "4598", 
"4599", "6101", "6102", "6104", "6105", "6106", "6107", "6108", 
"6109", "6111", "6112", "6113", "6114", "6115", "6116", "6118", 
"6119", "8002", "8003", "8004", "8005", "8006", "8007", "8008", 
"8009", "8010", "8011", "8012", "8013", "8014", "8015", "8017", 
"8018", "8019", "8020", "8021", "8097", "8098", "8099", "8402", 
"8403", "8404", "8405", "8406", "8408", "8409", "8410", "8411", 
"8412", "8413", "8414", "8416", "8417", "8418", "8419", "8422", 
"8423", "8426", "8427", "8429", "8430", "8431", "8432", "8433", 
"8458", "8497", "8498"), class = "factor"), FDay = structure(1380171600, class = c("POSIXct", 
"POSIXt"), tzone = "America/Bogota"), Lday = structure(1392094800, class = c("POSIXct", 
"POSIXt"), tzone = "America/Bogota"), ObsLength = 138, Fate = "Predation", 
    FieldName = structure(7L, .Label = c("Bryan", "Dassow", "H1", 
    "H2", "NARD", "SAY160", "SAY320", "SAY40A", "Schaeffer", 
    "SIB", "Wessels"), class = "factor"), Landscape = structure(2L, .Label = c("CHW", 
    "SAY", "SIB"), class = "factor"), Sex = structure(1L, .Label = c("F", 
    "M"), class = "factor")), .Names = c("BandNo", "FDay", "Lday", 
"ObsLength", "Fate", "FieldName", "Landscape", "Sex"), row.names = 1L, class = "data.frame") 
나는 성공적으로이 코드를 사용하여 내가 원하는 새로운 데이터 프레임 (y)를 생성 할 수 있습니다

:

library(lubridate) 
mydate<-seq(from=a$FDay,to=a$Lday,by='week') 
newband<-rep(a$BandNo,length(mydate)) 
newfate<-rep("Survive",length(mydate)) 
newfate[length(mydate)]<-a$Fate 
y<-data.frame(newband,mydate,newfate) 
y$FieldName<-a$FieldName 
y$Sex<-a$Sex 
y$Landscape<-a$Landscape 
y$WeekID<-week(a$mydate) 
y$Year<-year(a$mydate)) 

을하지만, 다음 코드를 사용하여 하나의 행 데이터 프레임 목록에 적용하려고하면 x를 "POSIXlt 클래스로 변환하는 방법을 모르겠다"라는 오류 메시지가 나타납니다.

이전 단계는 랩에 사용되었습니다. 지금 플라이에 오류가 발생했습니다

b<-list(a) 
d<-lapply(b,function(x){ 
mydate<-seq(from=x$FDay,to=x$Lday,by='week') 
newband<-rep(x$BandNo,length(mydate)) 
newfate<-rep("Survive",length(mydate)) 
newfate[length(mydate)]<-x$Fate 
y<-data.frame(newband,mydate,newfate) 
y$FieldName<-x$FieldName 
y$Sex<-x$Sex 
y$Landscape<-x$Landscape 
y$WeekID<-week(x$mydate) 
y$Year<-year(x$mydate)}) 

어떤 도움을 주셔서 감사합니다!

+0

나열된 코드에 몇 가지 문제점이 있습니다. 먼저, lapply를 열고 닫을 브래킷이 필요합니다. 코드를 지금 실행하면 구문 오류가 발생합니다. 구문 오류가 발생하면 해석기가 다음 줄을 계산하려고하기 때문에 "오류 : 개체 'x'을 (를) 찾을 수 없습니다. x 지점을 찾을 수 없습니다. 코드를 수정하여 평가할 수 있습니까? – jimmyb

+0

나는 그 변화를 만들었습니다, 미안 해요. 이제 다른 오류가 있습니다. "as.POSIXlt.default (x, tz = tz (x))의 오류 : 'x'를"POSIXlt "클래스로 변환하는 방법을 모른다. 정의와 같이 간단합니까? 어쨌든? – tlyons253

+0

'x $ mydate'는'x'에 컬럼 mydate가없고'NULL'을'POSIXct'로 변환 할 수 없기 때문에'NULL '입니다. 아마도'mydate'일까요? 'x $ mydate' 대신 – NicE

답변

0

나는 진짜 뼈대 실수를했다. 나는 y $ mydate를 마지막으로 참조해야했다. 여기에 lapply 함수는 다음과 같습니다.

d<-lapply(adult2,function(x){ 
mydate<-seq(from=x$FDay,to=x$Lday,by='week') 
newband<-rep(x$BandNo,length(mydate)) 
newfate<-rep("Survive",length(mydate)) 
newfate[length(mydate)]<-x$Fate 
y<-data.frame(newband,mydate,newfate) 
y$FieldName<-x$FieldName 
y$Sex<-x$Sex 
y$Landscape<-x$Landscape 
y$WeekID<-week(y$mydate) 
y$Year<-year(y$mydate) 
return(y)} 
)