让这是我的数据:
my.data<-data.frame(name=c("a","b","b","c","c","c"))
我需要的是一个变量,它指示每个名称及其在数据集中的相对频率。基本上,这看起来是这样的:
name target
1 a 0.1666667
2 b 0.3333333
3 b 0.3333333
4 c 0.5000000
5 c 0.5000000
6 c 0.5000000
我尝试的是为每个名称计算虚拟变量,然后根据这些虚拟变量计算新变量,这些变量指示数据集中每个名称的相对频率。见下文:
temp_dummies<-data.frame(spatstat::dummify(my.data$name))
my.data<-cbind.data.frame(my.data, temp_dummies)
rm(temp_dummies)
my.data %>%
dplyr::mutate(a_per=mean(a),
b_per=mean(b),
c_per=mean(c)) -> my.data
现在,我需要提取每个名称的相对频率,并将其聚合回来,以得到我的目标变量。我想我应该在下面这样做,但我不知道该变异什么。
my.data %>%
dplyr::group_by(name) %>%
dplyr::mutate(...) -> my.data
问题:
-
如何使用dplyr获取目标变量?我走对了吗?
-
有没有更容易的方法来达到同样的结果?
-
是否可以编写一个自动完成所有这些工作的函数?这似乎是一个相当标准的问题,我们应该能够通过简单地应用
function(x)
到
name
.