向data.frame中添加新列,其值是一列的随机样本,并以另一列为条件

问题描述

我想添加一个新列(category),其值(a/b)是id列的随机样本(不替换),但以值({ A/B列中的{1}}。 但是,当尝试这样做时,group列中的值会发生变化-我不明白为什么会这样。

id

(如果标题和问题表达得不够清楚,请随时编辑)

解决方法

问题在于,i用于'id'。如果数据集的row.names为'id',那将是可行的。在这里,我们可能需要match加上'id'

i1 <- with(df,match(sample(id[group == 1],size = 4,replace = FALSE),id))
df$category[i1] <- 'a'

,第二种情况类似

i2 <- with(df,match(sample(id[group == 2],size = 2,id))
df$category[i2] <- 'b'

-输出

df
#   id group category
#1   A     1        a
#2   B     1     <NA>
#3   C     1        a
#4   D     2        b
#5   E     1        a
#6   F     2     <NA>
#7   G     2        b
#8   H     2     <NA>
#9   I     1     <NA>
#10  J     1        a

df$id==LETTERS[1:10]
#[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
,

这很奇怪,但是当我用$运算符代替时,它通过在子设置函数中包含“类别”的名称而起作用。像这样:

set.seed(123)
df <- data.frame(id=LETTERS[1:10],group=sample(c("1","2"),size=10,replace=T))
df$category <- NA

df[df$id %in% sample(df[df$group=="1",]$id,size=4,replace=F),"category"] <- "a" 
df[df$id %in% sample(df[df$group=="2",size=2,"category"] <- "b" 

结果:

   id group category
1   A     1        a
2   B     1     <NA>
3   C     1        a
4   D     2     <NA>
5   E     1     <NA>
6   F     2     <NA>
7   G     2        b
8   H     2        b
9   I     1        a
10  J     1        a


df$id==LETTERS[1:10]

# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...