![](/img/trans.png)
[英]Using data in one data.frame to generate values for a new column in another data.frame in R
[英]Adding a new column to data.frame whose values are random samples of one column and conditioned on another
我想添加一個新列( category
),其值( a/b
)是id
列的隨機樣本(無替換),但以group
列中的值( A/B
)為條件。 但是,當嘗試這樣做時, id
列中的值會發生變化——我不明白為什么會發生這種情況。
set.seed(123)
df <- data.frame(id=LETTERS[1:10], group=sample(c("1","2"), size=10, replace=T))
df$category <- NA
> table(df$group)
1 2
6 4
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",]$id, size=2, replace=F),]$category <- "b"
> df
id group category
1 A 1 a
2 B 1 <NA>
3 B 1 a
4 D 2 b
5 E 1 <NA>
6 F 2 <NA>
7 G 2 <NA>
8 H 2 b
9 C 1 a
10 E 1 a
> df$id==LETTERS[1:10]
[1] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
# this should be all TRUE
(如果表達不夠清楚,請隨時編輯標題和問題)
問題是, 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, replace = FALSE), 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",]$id, size=2, replace=F), "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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.