R 用POSIXlt对象替换列值

R 用POSIXlt对象替换列值,r,dataframe,assign,posixct,R,Dataframe,Assign,Posixct,考虑以下R代码,它用一组POSIXct值替换数据帧中一列中的值: foo <- as.data.frame(list(bar=rep(5,5))) bar <- as.POSIXct(rep(5,5), origin="1970-1-1", tz="c") foo[,1] <- bar foo似乎POSIXlt对象是列表,有9个条目 unlist(as.POSIXlt(5, origin="1970-1-1")) sec min hour mday mon ye

考虑以下R代码,它用一组POSIXct值替换数据帧中一列中的值:

foo <- as.data.frame(list(bar=rep(5,5)))
bar <- as.POSIXct(rep(5,5), origin="1970-1-1", tz="c")
foo[,1] <- bar

foo似乎
POSIXlt
对象是列表,有9个条目

unlist(as.POSIXlt(5, origin="1970-1-1"))
sec   min  hour  mday   mon  year  wday  yday isdst 
  5     0     1     1     0    70     4     0     0

unlist(as.POSIXct(5, origin="1970-1-1"))
[1] "1970-01-01 00:00:05 CET"
显然,对data.frame的赋值失败,因为
POSIXlt
对象未列出

foo <- as.data.frame(list(bar=rep(5,5)))
bar <- as.POSIXlt(rep(5,5), origin="1970-1-1", tz="")
foo[,1] <- bar   # this fails
foo[,1:9] <- bar # this works

foo似乎
POSIXlt
对象是列表,有9个条目

unlist(as.POSIXlt(5, origin="1970-1-1"))
sec   min  hour  mday   mon  year  wday  yday isdst 
  5     0     1     1     0    70     4     0     0

unlist(as.POSIXct(5, origin="1970-1-1"))
[1] "1970-01-01 00:00:05 CET"
显然,对data.frame的赋值失败,因为
POSIXlt
对象未列出

foo <- as.data.frame(list(bar=rep(5,5)))
bar <- as.POSIXlt(rep(5,5), origin="1970-1-1", tz="")
foo[,1] <- bar   # this fails
foo[,1:9] <- bar # this works
foo来自
帮助(“[.data.frame”)

对于[替换值可以是一个列表:列表中的每个元素都是 用于替换(部分)一列,根据需要循环使用列表

所以你可以这样做:

df <- data.frame(a=1:2)
df[,2:3] <- list(3:4, 5:6)
#  a V2 V3
#1 1  3  5
#2 2  4  6
使用
帮助(“[.data.frame”)
中的
[将此列表分配给一列:

对于[替换值可以是一个列表:列表中的每个元素都是 用于替换(部分)一列,根据需要循环使用列表

所以你可以这样做:

df <- data.frame(a=1:2)
df[,2:3] <- list(3:4, 5:6)
#  a V2 V3
#1 1  3  5
#2 2  4  6

使用
将此列表分配到一列[我收到一条警告,说我的系统上的时区“c”未知。罗曼:我没有收到警告。“c”应该指当前时区。我想你可以指定UCT?或者你的本地时区?我收到一条警告,说我的系统上的时区“c”未知。罗曼:我没有收到警告。“c”应该指的是当前时区。我想您可以指定UCT?或您的本地时区?
df[,4] <- list(7, 8)
# Warning message:
#   In `[<-.data.frame`(`*tmp*`, , 4, value = list(7, 8)) :
#   provided 2 variables to replace 1 variables
#   a V2 V3 V4
# 1 1  3  5  7
# 2 2  4  6  7
unclass(rep(as.POSIXlt(Sys.time()), 2))
# $sec
# [1] 1.958244 1.958244
# 
# $min
# [1] 54 54
# 
# $hour
# [1] 10 10
# 
# $mday
# [1] 4 4
# 
# $mon
# [1] 9 9
# 
# $year
# [1] 113 113
# 
# $wday
# [1] 5 5
# 
# $yday
# [1] 276 276
# 
# $isdst
# [1] 1 1
# 
# attr(,"tzone")
# [1] ""     "CET"  "CEST"