我有一个看起来像这样的调查数据集。"年"、"月"和"日期"列记录了采访的进行日期,数据截至 2018 年 12 月 30 日:
| Year | Month | Date | USDollar |Governate|
|------|-------|------|----------|---------|
| 2018 | 6 | 10 | 38.50 | 11 |
| 2018 | 6 | 12 | 38.52 | 12 |
| 2018 | 6 | 14 | 38.61 | 10 |
| 2018 | 6 | 18 | 38.63 | 12 |
| 2018 | 6 | 21 | 38.63 | 13 |
| 2018 | 7 | 22 | 38.65 | 12 |
| 2018 | 7 | 23 | 39.41 | 13 |
| 2018 | 7 | 24 | 39.42 | 15 |
| 2018 | 7 | 02 | 39.43 | 12 |
| 2018 | 7 | 03 | 39.50 | 13 |
等等。我想做的是创建一个虚拟变量,如果日期在 10 月 7 日之后,则为 1,如果日期在 10 月 7 日之前,则为 0。我想称这个变量为"post_float"。
我尝试使用此命令df$post_float <- ifelse(df$month >= 10 & df$date >= 7, 1, 0)
但这并没有完全做到。在大多数情况下没关系,但它会弄乱一些日期(例如,11 月 5 日,因为这不符合命令要求(。如何设置虚拟人,使其在 10 月 7 日变为 1 并保持这种状态,直到数据集结束?
感谢您的帮助,很抱歉,如果我错过了任何明显的东西,我是 R 的新手。
你可以试试这个:
#Data
Data <- structure(list(Year = c(2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L), Month = c(6L, 6L, 6L, 6L, 6L, 7L,
7L, 7L, 7L, 7L), Date = c(10L, 12L, 14L, 18L, 21L, 22L, 23L,
24L, 2L, 3L), USDollar = c(38.5, 38.52, 38.61, 38.63, 38.63,
38.65, 39.41, 39.42, 39.43, 39.5), Governate = c(11L, 12L, 10L,
12L, 13L, 12L, 13L, 15L, 12L, 13L)), row.names = c(NA, -10L), class = "data.frame")
#Date
Data$FormatedDate <- as.Date(paste0(Data$Year,'-',Data$Month,'-',Data$Date),'%Y-%m-%d')
#Variable
Data$post_float <- ifelse(Data$FormatedDate>as.Date('2018-10-07'),1,0)
Year Month Date USDollar Governate FormatedDate post_float
1 2018 6 10 38.50 11 2018-06-10 0
2 2018 6 12 38.52 12 2018-06-12 0
3 2018 6 14 38.61 10 2018-06-14 0
4 2018 6 18 38.63 12 2018-06-18 0
5 2018 6 21 38.63 13 2018-06-21 0
6 2018 7 22 38.65 12 2018-07-22 0
7 2018 7 23 39.41 13 2018-07-23 0
8 2018 7 24 39.42 15 2018-07-24 0
9 2018 7 2 39.43 12 2018-07-02 0
10 2018 7 3 39.50 13 2018-07-03 0
日期的列结构建议使用ISOdate
。
d <- transform(d,
post_float=+(do.call("ISOdate", unname(d[1:3])) >
ISOdate(2018, 10, 07)))
d
# Year Month Date USDollar Governate post_float
# 1 2018 6 10 38.50 11 0
# 2 2018 6 12 38.52 12 0
# 3 2018 7 22 38.65 12 0
# 4 2018 7 23 39.41 13 0
# 5 2018 8 24 39.42 15 0
# 6 2018 9 2 39.43 12 0
# 7 2018 10 6 39.50 13 0
# 8 2018 10 7 39.50 13 0
# 9 2018 10 8 39.50 13 1
# 10 2018 10 9 39.50 13 1
<小时 />数据:
d <- structure(list(Year = c(2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L), Month = c(6L, 6L, 7L, 7L, 8L, 9L,
10L, 10L, 10L, 10L), Date = c(10L, 12L, 22L, 23L, 24L, 2L, 6L,
7L, 8L, 9L), USDollar = c(38.5, 38.52, 38.65, 39.41, 39.42, 39.43,
39.5, 39.5, 39.5, 39.5), Governate = c(11L, 12L, 12L, 13L, 15L,
12L, 13L, 13L, 13L, 13L)), class = "data.frame", row.names = c(NA,
-10L))