小编use*_*075的帖子

R数据表 - 创建一个新列,其中每个元素都是值列表

我已经开始使用R data.table了,我正在尝试执行以下操作:为简单起见,我们假设我有一个ArticleReadings列表,如下所示:

UserID    Time  ArticleID   Category   NumOfReading
'aaa'     7:50   'x'        'sports'   1
'bbb'     5:05   'x'        'sports'   1
'aaa'     8:40    'y'       'politics' 2
'aaa'     10:00    'z'      'sports'   3
Run Code Online (Sandbox Code Playgroud)

最终我想要一个新列,其中包含特定用户读取的所有类别的列表.在这个例子中,用户'aaa'的值将是'politics','sports'的向量,对于用户'bbb',它将是一个带有一个元素的向量:'sports'.我想要这种类型的列,因为后来我想对它进行一些操作(例如计算模式/显性类别,或显示流行的类别组合),所以我想先为每个用户获取一个唯一的向量,然后解决.我的所有试验都具有列的新值等功能,导致为每个元素单独设置矢量值,而不是矢量作为列值....例如,我的一个试验:

CategoriesList <- function(x){sort(unique(x))}
DT[,':='(UniqueCats=CategoriesList(Category)),by=userID]
Run Code Online (Sandbox Code Playgroud)

由于我是data.table和R中的用户定义函数的新手,我想我错过了将结果传递给向量的一些关键点...任何帮助将不胜感激!

r vector user-defined-functions data.table

6
推荐指数
1
解决办法
2159
查看次数

数据表-在多个列上应用相同的功能以创建新的数据表列

我正在使用data.table包。我有一个数据表,代表用户在网站上的操作。假设每个用户都可以访问一个网站,并对其执行多项操作。我的原始数据表是动作(每行都是一个动作),我想将此信息汇总到一个新的数据表中,并按用户访问次数进行分组(每次访问都有唯一的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
Run Code Online (Sandbox Code Playgroud)

我想要一个访问数据表,如下所示:

VisitID  UserName   UserStatus   VisitNum
aaaaaaa   John       Active        5
bbbbbbb   Dan        NonActive     7
Run Code Online (Sandbox Code Playgroud)

我创建了一个对数据表的子集(仅访问行)和一个字段起作用的函数,并且该函数应应用于多个字段(UserName,UserStatus,VisitNum)。

getGeneralField<- function(visitDT,field){
  vec = visitDT[,get(field)]
  return (unique(vec[vec != ""])[1])
}
Run Code Online (Sandbox Code Playgroud)

问题是,当by = VisitID时,每次在.SD上应用此功能的尝试都会导致与我计划的有所不同……最好的方法是什么?我使用!=“”以避免空白单元格。

r user-defined-functions aggregation lapply

4
推荐指数
1
解决办法
2977
查看次数