我已经创建了一个名为Data的表.此表包含非唯一ID字段.

data <- data.frame(ID = sample(c(1:5), 10, replace = T))

我有另一个名为概率的表,其中包含ID字段的匹配项、对应的比率和名称:

probabilities <- data.frame(ID = c(1,1,2,2,3,3,4,4,4,5), ratio = c(0.9, 0.1, 0.4, 0.6, 0.8, 0.2, 0.3, 0.3, 0.4, 1.0), name = c("A", "B", "A", "C", "F", "G", "B", "C", "G", "F"))

我正try 在数据表中创建一个名为NAME的新变量.这将由概率表中基于Ratio列的NAME变量填充.

例如,数据表中任何ID为1都应该有90%的几率是A,10%的几率是B,ID为4的ID应该有30%的几率是B,30%的几率是C,40%的几率是G,依此类推.

有人知道如何才能做到这一点吗?

我try 了以下方法,但遇到错误:

#load packages
library(dplyr)


#create new variable called name
data <- data %>% 
  mutate(name = sample(probabilities$name[ID=probabilities$ID],
                       size = n(),
                       prop = probabilities$ratio[ID=probabilities$ID],
                       replace = TRUE))

mutate()中的错误: 好了!计算name = sample(...)时出现问题. 由sample()中的错误导致: 好了!未使用的参数(属性=概率$比率[名称=概率$名称])

推荐答案

基本R解决方案,使用sApply()和Sample():

data$name <- sapply( data$ID, function(ID) sample(x = probabilities[probabilities$ID==ID,"name"],prob = probabilities[probabilities$ID==ID,"ratio"],size = 1))

R相关问答推荐

基于R中的GPS点用方向箭头替换点

使用R中的gt对R中的html rmarkdown文件进行条件格式设置表的单元格

次级y轴R gggplot2

当我们有多个特殊字符时,使用gsub删除名称和代码'

如何通过ggplot2添加短轴和删除长轴?

根据类别合并(汇总)某些行

使用带有OR条件的grepl过滤字符串

从圆到R中的多边形的标绘雷达图

过滤名称以特定字符串开头的文件

如何在使用箭头R包(箭头::OPEN_DATASSET)和dplyr谓词时编写具有整齐计算的函数?

优化从每个面的栅格中提取值

在ggplot2上从多个数据框创建复杂的自定义图形

是否可以将线性模型的p值添加到tbl_summary中

为R中的16组参数生成10000个样本的有效方法是什么?

避免在图例中显示VLINS组

有毒元素与表观遗传年龄的回归模型

如何调整一个facet_work()面板内的框图和移动标签之间的水平宽度?

名字的模糊匹配

生存时间序列的逻辑检验

如何在R中添加标识连续日期的新列