【发布时间】:2019-07-21 20:45:10
【问题描述】:
我有一个dataframe,其中第一列包含唯一行IDs,第二列包含行之间通常不唯一的值。下面是一个使用iris 数据的简化示例:
> df <- as.data.frame(iris$Sepal.Length)
> id <- rownames(df)
> df <- cbind(id, df)
> colnames(df) <- c("id", "Sepal.Length")
> nrow(df)
[1] 150
> length(unique(df$id))
[1] 150
> length(unique(df$Sepal.Length))
[1] 35
> head(df,10)
id Sepal.Length
1 1 5.1
2 2 4.9
3 3 4.7
4 4 4.6
5 5 5.0
6 6 5.4
7 7 4.6
8 8 5.0
9 9 4.4
10 10 4.9
我想从df$Sepal.Length 中随机抽样而不进行替换,以便抽样数据中的行具有唯一的行 ID 值。
> set.seed(22)
> df_sample <- df[sample(df$Sepal.Length, 10, replace=FALSE),]
但是,replace=FALSE 仍然给我带有重复 ID 的行:
> duplicated(df_sample$id)
[1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
有没有办法在不替换的情况下对这些数据进行采样,以便返回唯一的行?我正在尝试专门对df$Sepal.Length 进行采样,因为我还想为此列提供概率向量。谢谢!
【问题讨论】:
-
抱歉,如果不清楚 - 我正在展示一个简化的示例,但我需要专门对 df$Sepal.Length 进行抽样,因为我最终想为此列提供概率向量。我将更新问题以更明确地说明这一点。
-
可能是
df[sample(length(df$Sepal.Length), 10, replace=FALSE),]。如果没有,可能你没有清楚地解释问题。 -
@Suren 是的,这行得通,谢谢!这类似于 Shree 的回答。
-
是的,Shree 的回答与我的相似。如果他在我之前给出,我不会发表评论。
标签: r dataframe data-manipulation