我有一个看起来像这样的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 ))
答案 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)