R编码以随机删除重复行

时间:2014-05-10 02:01:15

标签: r

我有一个标记为merge的数据集,它有几个不同的标题,两个主要标题是idnumber1和idnumber2,例如:

idnumber 1           idnumber2     agegroup     gender
234700                46016         15            1
234700                46014         15            1
223914                46016         15            1
223914                46014         15            1
227296                46016         15            1
227296                46014         15            1
224170                46016         15            1
224170                46014         15            1
233531                46016         15            1
233531                46014         15            1

我有超过800000条数据记录和更多变量,这就是我要做的事情: - 计算数据集N

中的行数
  • 从第1行(i = 1)开始,下一行是否具有相同的idnumber1?如果是这样,下一行也是等等,直到你用相同的idnumber1计算行数(k)
  • 选择其中一个k行以保留
  • 生成0到1之间的随机数(r)。
  • 如果r <1 / k然后保持第1行,否则如果r <2 / k然后保持第2行,......如果r <= k / k则保持第k行
  • 记录您要保留的记录的idnumber2,并删除数据集中具有相同idnumber2的所有其他行
  • 还记录所选记录的相应列数据
  • 从第i行开始(当前idnumber1的第一行)并转到具有相同年龄组,性别等的最后一行,检查此行的idnumber2是否与所选行相同,如果是,则删除该行
  • 完成一个选择后,移动下一个idnumber1(现在是数据集中的第二行)并重复整个过程

1 个答案:

答案 0 :(得分:0)

据我所知,你试图在idnumber1中为每一个值随机保留一行。这可以通过split-apply-combine完成:

set.seed(144)
do.call(rbind, lapply(split(dat, dat$idnumber1),
                      function(x) x[sample(nrow(x), 1),]))
#        idnumber1 idnumber2 agegroup gender
# 223914    223914     46016       15      1
# 224170    224170     46014       15      1
# 227296    227296     46014       15      1
# 233531    233531     46014       15      1
# 234700    234700     46016       15      1