我有2个相同尺寸的数据框A,B。每个数据框的第一列是日期。我想创建一个具有0的第三个数据帧,其中A< B和1s,其中A> 1。 B除了日期列之外进行比较的元素。这是我到目前为止所做的,没有循环。
C = A
C[] = 0
temp = unlist(as.relistable(as.matrix(C[-1])))
temp[which(A[-1]>B[-1])] = 1
C = data.frame(C[1], relist(temp))
但似乎必须有一种更简单的方法(特别是考虑到data.frame维度相同)。
一般来说,将2个数据帧元素进行比较并将结果写入第3个数据帧的正确方法是什么?
答案 0 :(得分:2)
TRUE
和FALSE
具有1
和0
,因此您应该能够做到这一点......
C <- ( A > B ) + 0
要排除第一列,只需使用[
将其子集化为:
C <- ( A[,-1] > B[,-1] ) + 0
举例来说:
A <- data.frame( Date1 = as.POSIXct( Sys.Date()+101:105 ) , Date2 = as.POSIXct( Sys.Date()-1001:1005 ) )
# Date1 Date2
#1 2013-12-13 2010-12-07
#2 2013-12-14 2010-12-06
#3 2013-12-15 2010-12-05
#4 2013-12-16 2010-12-04
#5 2013-12-17 2010-12-03
B <- data.frame( Date1 = as.POSIXct( Sys.Date()+106:110 ) , Date2 = as.POSIXct( Sys.Date()-1006:1010 ) )
# Date1 Date2
#1 2013-12-18 2010-12-02
#2 2013-12-19 2010-12-01
#3 2013-12-20 2010-11-30
#4 2013-12-21 2010-11-29
#5 2013-12-22 2010-11-28
C <- ( A > B ) + 0
# Date1 Date2
#[1,] 0 1
#[2,] 0 1
#[3,] 0 1
#[4,] 0 1
#[5,] 0 1