我已经开始使用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中的用户定义函数的新手,我想我错过了将结果传递给向量的一些关键点...任何帮助将不胜感激!
我正在使用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上应用此功能的尝试都会导致与我计划的有所不同……最好的方法是什么?我使用!=“”以避免空白单元格。