-1

需要一些简单的 r 命令帮助来做一些通过 excel 中的枢轴完成的事情。我有一个包含 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
4

2 回答 2

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)

祝你有美好的一天!此外,如果您在导入文件时需要帮助,请尝试以下操作:无法从示例 Excel 文件中导入数据

于 2013-11-10T00:27:41.980 回答
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
于 2013-11-10T03:38:17.490 回答