我正在尝试将第一列的第一次出现与最后一次出现进行比较。我正在尝试检查col2
中重复值结束时col1
发生了多少变化。例如,对于样本数据:
Date col1 col2
2016-12-20 1 5 <= first occurrence of 1
2017-01-12 1 7 <= last occurrence of 1 (compare 7 > 5, passes: conclude 1)
2017-01-13 -1 8 <= first occurrence of -1
2017-01-16 -1 10
2017-01-17 -1 11 <= last occurrence of -1 (compare 11 < 8, fails: conclude 0)
如果col1
为1且last occurrence > first occurrence
,那么我想返回1.如果col1
为-1且last occurrence < first occurrence
,则我想返回-1
2016-12-20 1 5 0
2017-01-12 1 7 1
2017-01-13 -1 8 0
2017-01-16 -1 10 0
2017-01-17 -1 11 0
在上述情况下,我不确定如何提取值的第一次和最后一次出现。非常感谢帮助!
答案 0 :(得分:0)
将df
视为您的输入:
df = read.table(text='Date col1 col2
2016-12-20 1 5
2017-01-12 1 7
2017-01-13 -1 8
2017-01-16 -1 10
2017-01-17 -1 11
', stringsAsFactors=FALSE, header=TRUE)
您可以尝试按col1
进行分组,按日期排列,然后简单地比较col2
的极值:
df %>%
group_by(col1) %>%
arrange(Date) %>%
filter(row_number()==1 | row_number()==n()) %>%
mutate( k = (col2 - lag(col2,1)) * col1) %>%
mutate( k = if_else((k/abs(k)) <0, 0, k)) %>%
select(col1, k) %>%
filter(!is.na(k))
给出:
Source: local data frame [2 x 2]
Groups: col1 [2]
col1 k
<int> <dbl>
1 1 1
2 -1 0
P.S。必须对输出k
进行规范化以匹配您所需的格式。
答案 1 :(得分:0)
使用data.table
library(data.table)
dt<-setDT(df)
dt[,col4:=ifelse((seq_len(.N)==.N),ifelse((.SD[.N,2]*col1>.SD[1,2]*col1),1,0),0),by=(col1)]