gpt4 book ai didi

r - 数据表 - 在几列上应用相同的函数来创建新的数据表列

转载 作者:行者123 更新时间:2023-12-04 11:30:20 28 4
gpt4 key购买 nike

我正在使用 data.table 包。我有一个数据表,表示用户在网站上的操作。假设每个用户都可以访问一个网站,并对其执行多项操作。我的原始数据表是 Action (每一行都是一个 Action ),我想将这些信息聚合到一个新的数据表中,按用户访问分组(每次访问都有一个唯一的 ID)。有一些字段由同一访问的操作共享 - 例如 - 用户名、用户状态、访问编号等。每次访问的至少一个操作包含此信息(不一定是所有操作) )。我想为每次访问(= 具有相同访问 ID 的一组操作)检索此字段的值,并将其设置为访问新数据表中的访问。例如,如果我有以下原始数据表:

VisitID     ActionNum    UserName   UserStatus    VisitNum   ActionType
aaaaaaa 1 John Active 5 x
aaaaaaa 2 Active y
aaaaaaa 3 John 5 z
bbbbbbb 1 NonActive w
bbbbbbb 2 Dan 7 t

我想要一个访问数据表,如下:
VisitID  UserName   UserStatus   VisitNum
aaaaaaa John Active 5
bbbbbbb Dan NonActive 7

我创建了一个适用于数据表子集(仅访问行)和一个字段的函数,该函数应应用于多个字段(UserName、UserStatus、VisitNum)。
getGeneralField<- function(visitDT,field){
vec = visitDT[,get(field)]
return (unique(vec[vec != ""])[1])
}

问题是,当 by=VisitID 导致某些与我计划不同的结果时,每次在 .SD 上应用此功能的尝试...什么是最好的方法?我使用 !=""以避免出现空白单元格。

最佳答案

我们在 .SDcols 中指定感兴趣的列,按“访问 ID”分组,循环遍历 .SDcols 中的列( lapply(.SD, ... ) 并获取第一个非空白元素

dt[, lapply(.SD, function(x) x[nzchar(x)][1]), by = VisitID, .SDcols = 3:5]

关于r - 数据表 - 在几列上应用相同的函数来创建新的数据表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39879724/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com