在 R 中标记 data.table 频率图表的最简单方法是什么?

问题描述 投票:0回答:1

我很好奇标记 data.table 频率表的最简单方法是什么。例如,假设我有一个 data.table (dt1),其中以下列(动物)为

c(1,1,2,2,2,2,3,3,3,3,3,3)

我用:

dt2 <- dt1[, .N ,by = animals]

获取频率表(dt2)例如:

animals N
1: 1 2
2: 2 4
3: 3 6

如果

,标记(重命名)动物列的最优雅的方式是什么?
1 = turtle
2 = horse
3 = cat
4 = dog

如果没有 4/dog,则通过参考很容易做到,例如

dt2[animals == c(1:3), animalnames := c("turtle", "horse", "cat")]

但是,这带来了两个问题:

a)它创建了一个新列,这意味着需要处理“动物”列,这没什么大不了的,但如果有一个更优雅的解决方案就好了

b) 包含“dog”(“动物”列中不存在的元素)会导致错误:

dt2[animals == c(1:4), animalnames := c("turtle", "horse", "cat", "dog")]

Error in .prepareFastSubset(isub = isub, x = x, enclos = parent.frame(),  : 
  RHS of == is length 4 which is not 1 or nrow (3). For robustness, no recycling is allowed (other than of length 1 RHS). Consider %in% instead.

如果您满足以下条件,最简单的解决方案是什么: a) 想要重新标记“动物”列 b)希望能够使用给定样本中可以但可能不存在的可能标签列表(即另一个样本可能包含狗,另一个样本可能不包含猫,但我想对所有样本使用相同的代码)

谢谢!

r data.table frequency
1个回答
0
投票

你可以使用

fcase
:

dt2[,animals := fcase(animals == 1,'turtle',animals == 2,'horse',animals==3,'cat',animals=4,'dog')]
dt2

#   animals     N
#    <char> <int>
#1:  turtle     2
#2:   horse     4
#3:     cat     6
© www.soinside.com 2019 - 2024. All rights reserved.