R data table - 创建一个新列,其中每个元素都是一个值列表
R data table - create a new column where each element is a list of values
我已经开始使用 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
最终我想要一个新列,其中包含特定用户阅读的所有类别的列表。在此示例中,用户 'aaa' 的值将是 'politics'、'sports' 的向量,而用户 'bbb' 的值将是具有一个元素的向量:'sports'.
我想要这种类型的列,因为稍后我想对其进行一些操作(例如计算 Mode/dominant 类别,或显示流行的类别组合),所以我想首先为每个用户获取一个唯一的向量,然后排序。
我所有的尝试都具有诸如列的新值之类的功能,结果是为每个元素单独设置向量值,而不是将向量设置为列值....
例如,我的一项试验:
CategoriesList <- function(x){sort(unique(x))}
DT[,':='(UniqueCats=CategoriesList(Category)),by=userID]
由于我是 data.table 和 R 中用户定义函数的新手,我想我遗漏了一些关于将结果转移到向量的关键点......
如有任何帮助,我们将不胜感激!
如果我们需要数据集中的list
列,用list
包裹它
DT[, UniqueCats := list(list(sort(unique(Category)))) , by = UserID]
str(DT)
#Classes ‘data.table’ and 'data.frame': 4 obs. of 6 variables:
# $ UserID : chr "aaa" "bbb" "aaa" "aaa"
# $ Time : chr "7:50" "5:05" "8:40" "10:00"
# $ ArticleID : chr "x" "x" "y" "z"
# $ Category : chr "sports" "sports" "politics" "sports"
# $ NumOfReading: int 1 1 2 3
# $ UniqueCats :List of 4
# ..$ : chr "politics" "sports"
# ..$ : chr "sports"
# ..$ : chr "politics" "sports"
# ..$ : chr "politics" "sports"
我们还可以通过将元素与 paste
连接在一起来创建一个字符串列
DT[, uniqueCats := toString(sort(unique(Category))), by = UserID]
我已经开始使用 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
最终我想要一个新列,其中包含特定用户阅读的所有类别的列表。在此示例中,用户 'aaa' 的值将是 'politics'、'sports' 的向量,而用户 'bbb' 的值将是具有一个元素的向量:'sports'. 我想要这种类型的列,因为稍后我想对其进行一些操作(例如计算 Mode/dominant 类别,或显示流行的类别组合),所以我想首先为每个用户获取一个唯一的向量,然后排序。 我所有的尝试都具有诸如列的新值之类的功能,结果是为每个元素单独设置向量值,而不是将向量设置为列值.... 例如,我的一项试验:
CategoriesList <- function(x){sort(unique(x))}
DT[,':='(UniqueCats=CategoriesList(Category)),by=userID]
由于我是 data.table 和 R 中用户定义函数的新手,我想我遗漏了一些关于将结果转移到向量的关键点...... 如有任何帮助,我们将不胜感激!
如果我们需要数据集中的list
列,用list
DT[, UniqueCats := list(list(sort(unique(Category)))) , by = UserID]
str(DT)
#Classes ‘data.table’ and 'data.frame': 4 obs. of 6 variables:
# $ UserID : chr "aaa" "bbb" "aaa" "aaa"
# $ Time : chr "7:50" "5:05" "8:40" "10:00"
# $ ArticleID : chr "x" "x" "y" "z"
# $ Category : chr "sports" "sports" "politics" "sports"
# $ NumOfReading: int 1 1 2 3
# $ UniqueCats :List of 4
# ..$ : chr "politics" "sports"
# ..$ : chr "sports"
# ..$ : chr "politics" "sports"
# ..$ : chr "politics" "sports"
我们还可以通过将元素与 paste
DT[, uniqueCats := toString(sort(unique(Category))), by = UserID]