R:根据指定值计算行中的差异
我有一个数据框,看起来像这样:R:根据指定值计算行中的差异,r,R,我有一个数据框,看起来像这样: Game Team Value 1 A 0.6 1 B 0.5 2 C 1.2 2 D 0.3 我想创建一个新列,用于计算给定游戏的“值”差异,因此它将是: difference 0.1 -0.1 0.9 -0.9 换句话说,我想按“游戏”分组,但我不太确定如何做到这一点,前提是每组只有两个元素: library(data.table) # using @DavidArenburg clean
Game Team Value
1 A 0.6
1 B 0.5
2 C 1.2
2 D 0.3
我想创建一个新列,用于计算给定游戏的“值”差异,因此它将是:
difference
0.1
-0.1
0.9
-0.9
换句话说,我想按“游戏”分组,但我不太确定如何做到这一点,前提是每组只有两个元素:
library(data.table)
# using @DavidArenburg clean trick
# otherwise c(diff(rev(Value)),diff(Value)) makes it
setDT(df)[,difference:=diff(Value)*c(-1,1), by = Game][]
Game Team Value difference
1: 1 A 0.6 0.1
2: 1 B 0.5 -0.1
3: 2 C 1.2 0.9
4: 2 D 0.3 -0.9
假设每个组只有两个元素:
library(data.table)
# using @DavidArenburg clean trick
# otherwise c(diff(rev(Value)),diff(Value)) makes it
setDT(df)[,difference:=diff(Value)*c(-1,1), by = Game][]
Game Team Value difference
1: 1 A 0.6 0.1
2: 1 B 0.5 -0.1
3: 2 C 1.2 0.9
4: 2 D 0.3 -0.9
您还可以使用
aggregate
c(t(aggregate(Value~Game, df, function(x) c(diff(rev(x)), diff(x)))[, -1]))
[1] 0.1 -0.1 0.9 -0.9
您还可以使用
aggregate
c(t(aggregate(Value~Game, df, function(x) c(diff(rev(x)), diff(x)))[, -1]))
[1] 0.1 -0.1 0.9 -0.9
使用
ave
的简单base R解决方案可以是
with(df, ave(Value, Game, FUN = diff)) * c(-1, 1)
# [1] 0.1 -0.1 0.9 -0.9
使用
ave
的简单base R解决方案可以是
with(df, ave(Value, Game, FUN = diff)) * c(-1, 1)
# [1] 0.1 -0.1 0.9 -0.9
使用
dplyr
library(dplyr)
df1 %>%
group_by(Game) %>%
mutate(difference = diff(Value)*c(-1,1))
# Game Team Value difference
# (int) (chr) (dbl) (dbl)
#1 1 A 0.6 0.1
#2 1 B 0.5 -0.1
#3 2 C 1.2 0.9
#4 2 D 0.3 -0.9
使用
dplyr
library(dplyr)
df1 %>%
group_by(Game) %>%
mutate(difference = diff(Value)*c(-1,1))
# Game Team Value difference
# (int) (chr) (dbl) (dbl)
#1 1 A 0.6 0.1
#2 1 B 0.5 -0.1
#3 2 C 1.2 0.9
#4 2 D 0.3 -0.9
@csgillespie这怎么是一个重复的链接问题?@Davidernburg确切的问题不是重复的,但一般原则是重复的。本质上,问题是“我想把一个函数应用于一个变量上的数据”。过去有很多问题都涉及到了这一点(包括时间安排)。@csgillespie这是一个如何重复的链接问题?@DavidArenburg确切的问题不是重复的,但一般原则是重复的。本质上,问题是“我想把一个函数应用于一个变量上的数据”。过去有很多问题都涉及到这一点(包括时间安排)。