【发布时间】:2015-10-20 02:43:55
【问题描述】:
我有一个数据框 (df1) 可以从中采样行,例如:
name age
name1 7
name2 31
name3 31
name4 34
name5 100
name6 1
name7 35
name8 27
name9 23
name10 3
name11 21
name12 2
name13 50
name14 86
我用第一个数据帧中的随机行填充另一个数据帧 (df2),例如:
name age
name4 34
name2 31
name11 21
name12 2
name6 1
name14 86
在我的代码中,我从 df2 中选择几行(示例中为 5 行)以用 df1 中的 (5) 个随机行覆盖。
random_df2 <- sample(1:nrow(df2),5,replace=FALSE)
df2[random_df2] <- df1[sample(1:nrow(df1),5,replace=FALSE)]
但问题是我不想在 df2 中重复。
如果 df2 中存在重复行,则代码应继续从 df1 中采样行,直到 df2 中的所有行都是唯一的。
我在想类似(伪代码):
while(there are duplicate rows in df2) {
rowNums <- get the row numbers of rows that are not unique
num <- get the number of rows not unique
df2[rowNums,]<- sample(df1[sample(1:nrow(df1),num,replace=FALSE)]
}
不确定这是否是在 r.. 中实现结果的最佳方式。
【问题讨论】:
-
等一下,您是在从 df1 替换 df2 中的行之后从 df2 替换 df1 中的行吗?如果您将 df1 替换为最初取自 df1 的行,您如何期望它保持唯一性?保持唯一性的唯一方法是它只切换 2 个已经存在的行(或保持它们相同)。如果这就是你想要做的,那么有很多更简单的方法。我认为这个问题需要更多关于它试图做什么的细节,听起来这只是一个过程中的一步
-
对不起,我不想用 df2 替换 df1 中的行。只是在评论中写错了。你的答案看起来很接近我正在寻找的东西,将运行它并看看会发生什么。