R:在一个组上应用一个函数
R: applying a function over a group
我希望将函数应用于数据框,然后将该函数的结果存储在数据框的新列中。
这是我的数据框示例,tradeData:
Login AL Diff
a 1 0
a 1 0
a 1 0
a 0 1
a 0 0
a 0 0
a 0 0
a 1 -1
a 1 0
a 0 1
a 1 -1
a 1 0
a 0 1
b 1 0
b 0 1
b 0 0
b 0 0
b 1 -1
c 1 0
c 1 0
c 0 1
c 0 0
c 1 -1
其中 "Diff" 列是我要添加的列。它只是 tradeData 的值 row(x-1) 和 row(x) 之间的差异,按登录分组。
以下是我尝试过的一些示例:
tradeData$Diff = ave(tradeData$AL,tradeData$Login,FUN = function(x) {diff(x)})
和
tradeData$Diff = as.data.frame(with(tradeData,tapply(AL,Login,FUN = diff)))
到目前为止,我发现以下问题很有用:R applying a function to a subset of a data frame 但我不确定如何从这里继续,因为我不断收到错误。
谢谢
你可以试试
with(tradeData, ave(AL, Login, FUN=function(x) -1*c(0, diff(x))))
#[1] 0 0 0 1 0 0 0 -1 0 1 -1 0 1 0 1 0 0 -1 0 0 1 0 -1
或使用 data.table
的选项。使用 setDT
将 "data.frame" 转换为 "data.table"。按组 (by=Login
) 获取当前值和下一个值之间的差异。 shift
函数(在新开发版本中引入)与 type
等于 "lead" 获取下一个值。
library(data.table)#data.table_1.9.5
setDT(tradeData)[, Diff:=AL-shift(AL, type='lead',
fill=0) , by=Login][]
我希望将函数应用于数据框,然后将该函数的结果存储在数据框的新列中。
这是我的数据框示例,tradeData:
Login AL Diff
a 1 0
a 1 0
a 1 0
a 0 1
a 0 0
a 0 0
a 0 0
a 1 -1
a 1 0
a 0 1
a 1 -1
a 1 0
a 0 1
b 1 0
b 0 1
b 0 0
b 0 0
b 1 -1
c 1 0
c 1 0
c 0 1
c 0 0
c 1 -1
其中 "Diff" 列是我要添加的列。它只是 tradeData 的值 row(x-1) 和 row(x) 之间的差异,按登录分组。
以下是我尝试过的一些示例:
tradeData$Diff = ave(tradeData$AL,tradeData$Login,FUN = function(x) {diff(x)})
和
tradeData$Diff = as.data.frame(with(tradeData,tapply(AL,Login,FUN = diff)))
到目前为止,我发现以下问题很有用:R applying a function to a subset of a data frame 但我不确定如何从这里继续,因为我不断收到错误。
谢谢
你可以试试
with(tradeData, ave(AL, Login, FUN=function(x) -1*c(0, diff(x))))
#[1] 0 0 0 1 0 0 0 -1 0 1 -1 0 1 0 1 0 0 -1 0 0 1 0 -1
或使用 data.table
的选项。使用 setDT
将 "data.frame" 转换为 "data.table"。按组 (by=Login
) 获取当前值和下一个值之间的差异。 shift
函数(在新开发版本中引入)与 type
等于 "lead" 获取下一个值。
library(data.table)#data.table_1.9.5
setDT(tradeData)[, Diff:=AL-shift(AL, type='lead',
fill=0) , by=Login][]