根据r中的列值减去两个数据帧
我有两个数据帧:根据r中的列值减去两个数据帧,r,dplyr,R,Dplyr,我有两个数据帧: f <- data.frame( CF = c(1,2,3,4,1,2,3,4), Season = c("Fall", "Spring", "Summer", "Winter","Fall", "Spring", "Summer", "Winter"), Tmax = c(51,65,83,38,
f <- data.frame(
CF = c(1,2,3,4,1,2,3,4),
Season = c("Fall", "Spring", "Summer", "Winter","Fall", "Spring", "Summer", "Winter"),
Tmax = c(51,65,83,38,52,68,90,45),
Tmin = c(30,40,53,19, 32,43,60,23))
h <- data.frame(
Season = c("Fall", "Spring", "Summer", "Winter"),
Tmax = c(47,60,79,35),
Tmin = c(27,36,52,16)
)
我该怎么做?Dplyr解决方案始终受到赞赏。谢谢 这里有一个使用
dplyr
进行加法和减法的简单方法
库(dplyr)
f%>%
左联合(h,by=“seasure”)%>%
突变(Tmax_delta=Tmax.x-Tmax.y,
Tmin_delta=Tmin.x-Tmin.y)%>%
选择(CF,季节,以(“\u delta”)结束)
CF季节Tmax\u delta Tmin\u delta
1跌倒4 3
2弹簧5 4
3夏季4 1
4冬季3 3
5.1跌倒5.5
6 2弹簧8 7
7 3夏季11 8
8 4冬季10 7
使用
匹配
合并
看起来您实际上不需要这里的
dplyr
。您是否检查了merge
功能?到目前为止,您尝试过哪些功能不起作用?这有助于merge(f,h,by=c('seasure'),all.x=t)
delta <- data.frame(
CF = c(1,2,3,4,1,2,3,4),
Season = c("Fall", "Spring", "Summer", "Winter","Fall", "Spring", "Summer", "Winter"),
Tmax_delta = c(4,5,4,3,5,8,11,10),
Tmin_delta = c(3,4,1,3,5,7,8,7)
)
nms <- c("Tmax","Tmin")
delta <- cbind(f[1:2],setNames(f[nms]-h[match(f$Season,h$Season),][nms],paste0(nms,"_delta")))
> delta
CF Season Tmax_delta Tmin_delta
1 1 Fall 4 3
2 2 Spring 5 4
3 3 Summer 4 1
4 4 Winter 3 3
5 1 Fall 5 5
6 2 Spring 8 7
7 3 Summer 11 8
8 4 Winter 10 7
u <- merge(f, h, by = "Season", all = TRUE)
d <- u[grep("\\.x", names(u))] - u[grep("\\.y", names(u))]
delta <- cbind(u[c("CF", "Season")], setNames(d, gsub("\\..*", "_delta", names(d))))
> delta
CF Season Tmax_delta Tmin_delta
1 1 Fall 4 3
2 1 Fall 5 5
3 2 Spring 5 4
4 2 Spring 8 7
5 3 Summer 4 1
6 3 Summer 11 8
7 4 Winter 3 3
8 4 Winter 10 7