通过子集生成新的变量值

时间:2014-01-13 09:48:15

标签: r merge indexing subset

我有一个数据集,我正在尝试使用与特定子集关联的随机值创建一个新变量。

例如,给定数据框:

data(iris)
iris=iris

我想要另一个变量,它将iris$Species的每个值与一个随机数(0到1之间)相关联。这可以通过创建数据框以迂回的方式完成:

df=data.frame(unique(iris$Species),runif(length(unique(iris$Species))))

将其与原始数据框合并:

iris=merge(iris,df,by.x="Species",by.y="unique.iris.Species.")

这实现了我想要的东西,但它不够优雅。此外,如果我想在不同的变量上多次复制这个过程,这个过程将是繁重的。我希望的是一些快速索引方法,希望看起来像:

iris$Species.unif=runif(length(unique(iris$Species)))[iris$Species]

鉴于R中的索引通常非常灵活,我希望有一些方法可以做到这一点,我不知道。

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

您可能想尝试使用级别:

iris <- iris
iris$species_unif <- iris$Species
levels(iris$species_unif ) <- runif(length(levels(iris$Species)))