我将以下格式的数据作为数据框:
* Date Lat Long ID
* May 4 30 31 1
* May 4 30 31 2
* May 4 30 31 3
* May 5 30 31 4
* May 5 31 31 5
* May 5 31 31 6
* May 6 31 31 7
* May 6 33 31 8
* May 6 31 31 9
我希望能够按日期提取数据框并应用'fossil'包中的以下功能
create.lats(x, loc="locality", long="longitude", lat="latitude")
我使用split来按日期分解数据,但这会将所有内容转换为列表
split(mydata, with(mydata, (date)), drop = TRUE)
然后我需要将每个单独的列表转换回带有原始标题的数据框。
我想我需要一个循环才能做到这一点?不幸的是,我被困在哪里,所以任何帮助将不胜感激
答案 0 :(得分:0)
这是按因子应用于数据帧的create.labs函数,并返回到由原始数据框和新输出组成的数据框中:
rm(list=ls())
require(fossil)
df = data.frame("Date"=sample(LETTERS[1:4],100,replace=TRUE),
"Lat"= sample(30:35,100,replace=TRUE),
"Long"= sample(30:35,100,replace=TRUE),
"ID" = sample(1:5,100,replace=TRUE) )
endresult = do.call("rbind",by(df, df$Date,
function(x)
{ data.frame(cbind(x,create.lats(x,loc="Date", long="Long", lat="Lat")),stringsAsFactors=F) } ))
rownames(endresult)=NULL
您也可以在plyr包中使用ddply
执行此操作。我建议您在原始问题中使用dput
,以便人们更轻松地查看您的数据。