我想根据传感器列中的值减去Temp列中的值。按每个日期和位置分组,我想从传感器值为2的Temp中传感器值为1减去Temp。请参阅下面的数据示例。
date <- c("2016-03-21","2016-03-21","2016-03-21","2016-03-21","2016-03-21","2016-03-21")
location <- c(1,1,2,2,3,3)
sensor <- c(1,16,1,16,1,16)
Temp <- c(35,34,45,42,46,47)
df <- data.frame(date,location,sensor,Temp)
这是我尝试使用dplyr
...
test <- df %>% group_by(date,location,sensor) %>% lfMaxTemp$Temp["sensor"==1]-lfMaxTemp$Temp["sensor"==16]
这是我想要的结果:
date location diff
1 2016-03-21 1 1
2 2016-03-21 2 3
3 2016-03-21 3 -1
答案 0 :(得分:1)
library(dplyr)
df %>% group_by(date, location) %>% summarise(diff = Temp[sensor==1]- Temp[sensor==16])
# date location diff
#1 2016-03-21 1 1
#2 2016-03-21 2 3
#3 2016-03-21 3 -1
答案 1 :(得分:1)
我们可以使用data.table
。将'data.frame'转换为'data.table'(setDT(df)
),按'日期','位置',order
将基于'sensor'的行按降序分组,我们总结了通过使用diff
library(data.table)
setDT(df)[order(-sensor), .(Diff = diff(Temp)), .(date, location)]
# date location Diff
#1: 2016-03-21 1 1
#2: 2016-03-21 2 3
#3: 2016-03-21 3 -1
注意:这里我们假设每个'Temp'
在'Temp'中只有1和16个值如果'Temp'中还有其他值,只需在分组之前进行过滤
setDT(df)[Temp %in% c(1, 16)][order(-sensor), .(Diff = diff(Temp)), .(date, location)]
df <- data.frame(date,location,sensor,Temp)
评论
建议不要使用as.data.frame(cbind(..
来构建data.frame
,因为它可能导致所有列都位于class
factor/character
中。