合并两列,根据原始设置值

时间:2017-07-07 22:01:08

标签: r calculated-columns

我有一个看起来像这样的data.frame:

.nav a

我希望将这两者合并为一列,例如:

date1                  date2
2015-09-17 03:07:00    2015-09-17 11:53:00
2015-09-17 08:00:00    2015-09-18 11:48:59
2015-09-18 15:58:00    2015-09-22 12:14:00
2015-09-22 12:14:00    2015-09-24 13:58:21

请注意,日期(如最后一个,最后一个,但两个)可以相等。现在,我想添加一个列'值'。对于在date1中具有它的原点的每个日期,该值应为1,如果它的原点在date2中,则它应为2.

添加新列很明显。合并工作正常。我用过:

dates
2015-09-17 03:07:00    
2015-09-17 11:53:00
2015-09-17 08:00:00    
2015-09-18 11:48:59
2015-09-18 15:58:00    
2015-09-22 12:14:00
2015-09-22 12:14:00    
2015-09-24 13:58:21

这对于列的合并完全正常,但是如何获得df $ value的正确值?

结果应为:

df <- as.data.frame(df$date1)
df <- data.frame(date1 = c(df$date1, test$date2 ))

3 个答案:

答案 0 :(得分:1)

我试图模仿你的问题。 如果你不关心时间复杂性,这是我可以建议的最简单的解决方案。

a = c(1,3,5)
b = c(2,4,6)

df = data.frame(a, b) 
d1 = c()
d2 = c()

for(counter in 1:length(df$a))
{  
  d1 = c(d1,df$a[counter],df$b[counter]) 
  d2 = c(d2,1,2) 
}

df = data.frame(d1, d2) 
print(df)
  

输入:

     

a b

     

1 2

     

3 4

     

5 6

     

输出:

     

d1 d2

     

1 1

     

2 2

     

3 1

     

4 2

     

5 1

     

6 2

答案 1 :(得分:0)

你不能这样做吗?

dates1 <- data.frame(dates = c("2015-09-17 03:07:00",
                          "2015-09-17 08:00:00",
                          "2015-09-18 15:58:00",
                          "2015-09-22 12:14:00"), value = 1)

dates2 <- data.frame(dates = c("2015-09-17 11:53:00",
                          "2015-09-18 11:48:59",
                          "2015-09-22 12:14:00",    
                          "2015-09-24 13:58:21"), value = 2)

# row-bind the two data.frames
df <- rbind(dates1, dates2)

# if "dates" is in a string format, convert to timestamp
df$dates <- strptime(df$dates, format = "%Y-%m-%d %H:%M:%S")

# order by "dates"
df[order(df$dates),]

# result:
                dates value
1 2015-09-17 03:07:00     1
2 2015-09-17 08:00:00     1
5 2015-09-17 11:53:00     2
6 2015-09-18 11:48:59     2
3 2015-09-18 15:58:00     1
4 2015-09-22 12:14:00     1
7 2015-09-22 12:14:00     2
8 2015-09-24 13:58:21     2

答案 2 :(得分:0)

可能有一个更聪明的解决方案,但我只是将每个列分成自己的数据框,将value列添加到rbind(),然后添加到单个dates数据中帧。

df1 <- df$date1
df1$value <- 1

df2 <- df$date2
df2$value <- 2

dates <- rbind(df1,df2)