需要一些简单的r命令帮助做一些通过excel中的pivot完成的事情。 我有一个包含2个变量ID和日期的表。我需要一个可以创建数据框的命令,该数据框具有这些ID的唯一列表以及针对ID的最小日期。
例如,假设我的数据框是转置(ID列表是col 1而Date2是col 2)
ID: ID1 ID1 ID2 ID2 ID3
Date: Mar 01 Mar 02 Mar03 Mar 04 Mar 05
我需要一个提供
的数据框ID1 Mar01
ID2 Mar03
ID3 Mar05
答案 0 :(得分:0)
这里的关键是使用as.Date
作为日期数据类型,并使用其中给出的格式之一,请参阅?format.Date
格式类型。让我们创建一个输入表的示例:
df_input<-data.frame(ID=sample(1:5), Date=as.Date(sample(c("2012-10-03", "2012-11-03", "2012-12-03"), size= 5,replace=T)))
现在使用sort
对输入数据框进行排序。喜欢:
sort(df_input$Date)
祝你有美好的一天!另外,如果您需要帮助导入文件,请尝试:Unable to import data from a sample Excel file
答案 1 :(得分:0)
以下是我对此的解释。
您的首字母data.frame
就是这样的。 (我在data.frame
添加了一个额外的无序值,所以我的回答与你的不同。)
mydf <- data.frame(ID = c("ID1", "ID1", "ID2", "ID2", "ID3", "ID3"),
Date = c("Mar 01", "Mar 02", "Mar 03", "Mar 04", "Mar 05", "Mar 04"))
mydf
# ID Date
# 1 ID1 Mar 01
# 2 ID1 Mar 02
# 3 ID2 Mar 03
# 4 ID2 Mar 04
# 5 ID3 Mar 05
# 6 ID3 Mar 04
首先,在“日期”列中创建实际的“日期”对象。我假设您的日期格式为“星期一”,因此我在"%b %d"
中使用了strptime
。由于没有年份,因此假设当前年份。
Date2 <- strptime(mydf$Date, format="%b %d") ## ASSUMES THE CURRENT YEAR
Date2
# [1] "2013-03-01" "2013-03-02" "2013-03-03" "2013-03-04" "2013-03-05" "2013-03-04"
接下来,找到一个允许我们通过“ID”变量订购这些日期的功能。在基数R中,ave
非常方便。
ave(as.numeric(Date2), mydf$ID, FUN = order)
# [1] 1 2 1 2 2 1
将这些值用于每个ID的第一个(最低)值的子集(即,结果等于“1”的位置)。
mydf[ave(as.numeric(Date2), mydf$ID, FUN = order) == 1, ]
# ID Date
# 1 ID1 Mar 01
# 3 ID2 Mar 03
# 6 ID3 Mar 04