我有一个包含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"))
列1中的值也是字符,并且
我需要遍历此列中的每一行。如果它们相同,则保留它们中的最后一个,并从最后两列中检索该位置的相应值。例如,对于id1
,我将仅保留第三个值,并从C
中检索col2
,并从CC
中检索col3
。
如果有唯一的行,只需按原样检索col2
和col3
。
我需要的输出应该是:
col1 col2 col3
id1 C CC
id6 D DD
id3 F FF
我尝试了以下类似操作,并收到“如果、、、在需要TRUE / FALSE时缺少值的错误。
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
}
}
关于如何解决这个问题的任何想法?我不必坚持使用数据表
谢谢
答案 0 :(得分:2)
有很多方法可以解决此问题,但是一种简单的方法是使用duplicated
检查重复项,并保持第一个值从头开始:
dt[!duplicated(dt$col1, fromLast = T),]
答案 1 :(得分:0)
您可能想要duplicated
答案。只是因为我喜欢我的dplyr
工作流程:
library(dplyr)
dt %>%
group_by(col1) %>%
summarise_all(last)
一个陷阱是它将按col1
排序。