减去一列中的值并更改另一列
Subtracting value in a column and change another one
我有一个如下所示的数据框:
structure(list(V1 = c(1174060957322141696, 1174107739209043968,
1175456617980149760, 1175463444805558272, 1175475052307013632,
1175916108697808896, 1177035962104369152, 1177959867077791744,
1180512511436709888, 1179879113844236288), V2 = structure(c(573L,
595L, 87L, 88L, 91L, 67L, 561L, 100L, 77L, 1L), .Label = c("Fri Oct 04 00:01:16 CEST 2019",
"Sat Oct 05 13:55:30 CEST 2019", "Sat Oct 05 13:55:56 CEST 2019",
"Wed Oct 02 10:25:36 CEST 2019", "Wed Oct 02 11:47:16 CEST 2019",
"Wed Oct 02 23:43:18 CEST 2019", "Wed Oct 02 23:46:07 CEST 2019",
"Wed Oct 02 23:52:27 CEST 2019", "Wed Oct 02 23:54:42 CEST 2019",
"Wed Oct 02 23:55:50 CEST 2019", "Wed Oct 02 23:56:11 CEST 2019",
"Wed Oct 02 23:56:41 CEST 2019", "Wed Oct 02 23:57:12 CEST 2019",
"Wed Oct 02 23:58:02 CEST 2019", "Wed Oct 02 23:58:53 CEST 2019",
"Wed Oct 02 23:59:05 CEST 2019", "Wed Oct 02 23:59:16 CEST 2019",
"Wed Oct 02 23:59:42 CEST 2019", "Wed Sep 18 01:47:53 CEST 2019",
"Wed Sep 25 00:50:36 CEST 2019", "Wed Sep 25 01:06:26 CEST 2019"
), class = "factor")), row.names = c(NA, 10L), class = "data.frame")
我想通过减去 07:00:00 来更改 V4 列中的小时数。如果 V4 列中的小时数小于 07:00:00,那么它也应该更改 V3 列中的日期,如果日期转到前一个月,则它应该更改 V2 列中的月份。这样做的最终目的是计算每天有多少行,我可以使用:
count(entertainment_one, c("V2", "V3"))
但在我需要重新组织我的数据框之前。
我是 R 的新手,不知道从哪里开始。非常感谢任何帮助,非常感谢!
首先要注意的是您的 V2
是一个因素;他们的行为与您想象的不同。快速将其转换回字符向量!
df$V2 <- as.character(df$V2)
现在,让我们将日期作为实际的日期时间向量。但首先,将语言环境设置为英语,因为您的日期似乎是英语;否则从与您的计算机不同的语言解析日期可能有效:
Sys.getlocale('LC_TIME') # take note of this value if you want to reset it.
Sys.setlocale('LC_TIME', 'english') # works on windows
df$dates <- strptime(df$V2, '%a %b %d %T CEST %Y', tz='XXX')
你看到 'XXX
' - 那是因为我不知道 CEST 是什么时区。如果你所有的日期都在同一个时区,你可能不会注意到...
此时,df$dates
是一个POSIXlt-class对象。尝试添加 10
(或 1 或任何小整数)
df$dates + 1
[1] "2019-10-04 00:01:17 EDT" "2019-10-05 13:55:31 EDT" "2019-10-05 13:55:57 EDT" ...
啊,在数秒呢。
所以要减去 7 小时,减去 7 小时的秒数:
df$offset <- df$dates - 7 * 60 * 60
看,日子和月份都相应地变化。现在使用包 lubridate
提取日和月组件:
library(lubridate)
month(df$offset)
day(df$offset)
我有一个如下所示的数据框:
structure(list(V1 = c(1174060957322141696, 1174107739209043968,
1175456617980149760, 1175463444805558272, 1175475052307013632,
1175916108697808896, 1177035962104369152, 1177959867077791744,
1180512511436709888, 1179879113844236288), V2 = structure(c(573L,
595L, 87L, 88L, 91L, 67L, 561L, 100L, 77L, 1L), .Label = c("Fri Oct 04 00:01:16 CEST 2019",
"Sat Oct 05 13:55:30 CEST 2019", "Sat Oct 05 13:55:56 CEST 2019",
"Wed Oct 02 10:25:36 CEST 2019", "Wed Oct 02 11:47:16 CEST 2019",
"Wed Oct 02 23:43:18 CEST 2019", "Wed Oct 02 23:46:07 CEST 2019",
"Wed Oct 02 23:52:27 CEST 2019", "Wed Oct 02 23:54:42 CEST 2019",
"Wed Oct 02 23:55:50 CEST 2019", "Wed Oct 02 23:56:11 CEST 2019",
"Wed Oct 02 23:56:41 CEST 2019", "Wed Oct 02 23:57:12 CEST 2019",
"Wed Oct 02 23:58:02 CEST 2019", "Wed Oct 02 23:58:53 CEST 2019",
"Wed Oct 02 23:59:05 CEST 2019", "Wed Oct 02 23:59:16 CEST 2019",
"Wed Oct 02 23:59:42 CEST 2019", "Wed Sep 18 01:47:53 CEST 2019",
"Wed Sep 25 00:50:36 CEST 2019", "Wed Sep 25 01:06:26 CEST 2019"
), class = "factor")), row.names = c(NA, 10L), class = "data.frame")
我想通过减去 07:00:00 来更改 V4 列中的小时数。如果 V4 列中的小时数小于 07:00:00,那么它也应该更改 V3 列中的日期,如果日期转到前一个月,则它应该更改 V2 列中的月份。这样做的最终目的是计算每天有多少行,我可以使用: count(entertainment_one, c("V2", "V3")) 但在我需要重新组织我的数据框之前。 我是 R 的新手,不知道从哪里开始。非常感谢任何帮助,非常感谢!
首先要注意的是您的 V2
是一个因素;他们的行为与您想象的不同。快速将其转换回字符向量!
df$V2 <- as.character(df$V2)
现在,让我们将日期作为实际的日期时间向量。但首先,将语言环境设置为英语,因为您的日期似乎是英语;否则从与您的计算机不同的语言解析日期可能有效:
Sys.getlocale('LC_TIME') # take note of this value if you want to reset it.
Sys.setlocale('LC_TIME', 'english') # works on windows
df$dates <- strptime(df$V2, '%a %b %d %T CEST %Y', tz='XXX')
你看到 'XXX
' - 那是因为我不知道 CEST 是什么时区。如果你所有的日期都在同一个时区,你可能不会注意到...
此时,df$dates
是一个POSIXlt-class对象。尝试添加 10
(或 1 或任何小整数)
df$dates + 1
[1] "2019-10-04 00:01:17 EDT" "2019-10-05 13:55:31 EDT" "2019-10-05 13:55:57 EDT" ...
啊,在数秒呢。 所以要减去 7 小时,减去 7 小时的秒数:
df$offset <- df$dates - 7 * 60 * 60
看,日子和月份都相应地变化。现在使用包 lubridate
提取日和月组件:
library(lubridate)
month(df$offset)
day(df$offset)