【问题标题】:Iterate over identical rows in data tables迭代数据表中的相同行
【发布时间】:2019-02-12 21:12:06
【问题描述】:

我有一个包含 3 列的数据表,如下所示:

dt <- data.table(
col1 = c("id1","id1","id1","id6","id3","id3"), 
col2 = c("A", "B", "C", "D", "E", "F"), 
col3 = c("AA", "BB", "CC", "DD", "EE", "FF"))

col 1 中的值也是字符,并且 我需要遍历此列中的每一行。如果它们相同,则保留最后一个,并从最后两列中检索该位置的相应值。例如,对于id1,我将只保留第三个值并从col2CCcol3 检索C。 如果有唯一的行,只需按原样检索col2col3

我需要的输出应该是:

col1    col2   col3

id1     C      CC

id6     D      DD

id3     F      FF

我尝试了类似下面的方法并得到“如果需要 TRUE/FALSE 的 if ,,, 缺失值出错。

for (i in nrow(dt)) {
 if (dt[i,1]!=dt[i+1,1]){
  dt[i, 2] = dt[i,2]
}
  else {
    dt[i,2] <- dt$QUESTION
 }
}

关于如何解决这个问题的任何想法?我不必坚持使用数据表

谢谢

【问题讨论】:

  • 几个编码错误。在您的 for 循环中,您必须编写 1:nrow(dt) 以便 i 迭代一个向量。目前i只有6个。另外,你的数据表中没有QUESTION

标签: r


【解决方案1】:

有很多方法可以解决这个问题,但一种简单的方法是使用 duplicated 检查重复项并保留从末尾开始的第一个值:

dt[!duplicated(dt$col1, fromLast = T),]

【讨论】:

    【解决方案2】:

    duplicated 答案可能是您想要的。但仅仅因为我喜欢我的dplyr 工作流程:

    library(dplyr)
    
    dt %>%
      group_by(col1) %>%
      summarise_all(last)
    

    一个问题是它将按col1 排序。

    【讨论】:

      猜你喜欢
      • 2014-01-13
      • 1970-01-01
      • 2021-10-04
      • 2012-12-06
      • 2020-07-09
      • 2018-02-20
      • 1970-01-01
      • 2011-05-20
      相关资源
      最近更新 更多