gpt4 book ai didi

r - 将多列合并为一列并生成索引变量

转载 作者:行者123 更新时间:2023-12-03 23:45:27 26 4
gpt4 key购买 nike

我有如下所示的三个日期列

       Id Date1       Date2         Date3
12 2005-12-22 NA NA
11 2009-10-11 NA NA
29 NA 2005-04-11 NA
45 NA NA 2008-11-06
39 NA NA 2006-01-02
44 NA 2005-04-16 NA

我试图将三个日期列合并为一个日期列,并创建一个索引变量,如果 Date1 列中有日期值,则为 1;如果 Date2 列中有日期,则为 2;如果 Date2 列中有日期,则为 3 Date3 列

       Id Date        Index
12 2005-12-22 1
11 2009-10-11 1
29 2005-04-11 2
45 2008-11-06 3
39 2006-01-02 3
44 2005-04-16 2

我可以使用大量的 ifelse 语句来做到这一点我想知道是否有人知道这样做的有效方法?

最佳答案

这是 reshape 从“宽”到“长”格式的经典用法。如果 d 是您的数据框:

d2 <- reshape(d, idvar = "Id", v.names = "Date", timevar = "Index",
varying = c("Date1", "Date2", "Date3"), direction = "long")

结果:

> d2
Id Index Date
12.1 12 1 2005-12-22
11.1 11 1 2009-10-11
29.1 29 1 <NA>
45.1 45 1 <NA>
39.1 39 1 <NA>
44.1 44 1 <NA>
12.2 12 2 <NA>
11.2 11 2 <NA>
29.2 29 2 2005-04-11
45.2 45 2 <NA>
39.2 39 2 <NA>
44.2 44 2 2005-04-16
12.3 12 3 <NA>
11.3 11 3 <NA>
29.3 29 3 <NA>
45.3 45 3 2008-11-06
39.3 39 3 2006-01-02
44.3 44 3 <NA>

如果您不想要所有的 NA 值(以上),您可以子集化:

> d2[!is.na(d2$Date),]
Id Index Date
12.1 12 1 2005-12-22
11.1 11 1 2009-10-11
29.2 29 2 2005-04-11
44.2 44 2 2005-04-16
45.3 45 3 2008-11-06
39.3 39 3 2006-01-02

关于r - 将多列合并为一列并生成索引变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29455255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com