R 删除重复的行子集

R 删除重复的行子集,r,duplicate-removal,R,Duplicate Removal,我有一个按日期排序的索引中的股票列表,我正在尝试删除前一行具有相同股票代码的所有行。这将给出初始索引的数据帧以及索引发生更改的所有日期 在我的工作示例中,我将使用名称而不是日期列,以及一些数字 起初,我认为可以使用subset()和删除行!复制 name <- c("Joe","Mary","Sue","Frank","Carol","Bob","Kate","Jay") num <- c(1,2,2,1,2,2,2,3) num2 <- c(1,1,1,1,1,1,1,1)

我有一个按日期排序的索引中的股票列表,我正在尝试删除前一行具有相同股票代码的所有行。这将给出初始索引的数据帧以及索引发生更改的所有日期

在我的工作示例中,我将使用名称而不是日期列,以及一些数字

起初,我认为可以使用subset()和删除行!复制

name <- c("Joe","Mary","Sue","Frank","Carol","Bob","Kate","Jay")
num <- c(1,2,2,1,2,2,2,3)
num2 <- c(1,1,1,1,1,1,1,1)
df <- data.frame(name,num,num2)
dfnew <- subset(df, !duplicated(df[,2]))

name不清楚您想做什么。但我想:

df[c(1,diff(df$num)) !=0,]
   name num num2
1   Joe   1    1
2  Mary   2    1
4 Frank   1    1
5 Carol   2    1
8   Jay   3    1

作为一般建议,我建议您在开始使用R编程时,先阅读R地狱,我认为循环是最简单的部分。这只是一种合乎逻辑的方式来做我需要的事情,而不需要对R中的内置函数有太多的了解。从那时起,我学会了使用各种不同的函数和技巧来加快速度的经验。这些函数比for循环更抽象,因此需要一些时间才能习惯。话虽如此,我仍然不是一个很强的程序员,我对循环的依赖程度可能比我应该的要高。但只要你把这件事告诉自己,这里的人就不会评判你;)(半开玩笑)另外,我不确定你想从另外两段代码中得到什么。谢谢你的R地狱链接!这解决了工作示例。我的真实数据有100多列,所以我试图理解和概括您所做的工作。看起来“1”保留了第一行,而diff函数删除了我想要删除的行。我尝试了df[c(1,diff(df[c(2:3),])!=0,]来尝试将diff函数扩展到多个列,但是我得到了一个错误。错误:在“df…”中出现意外的“]”。。。。。
result <- matrix(data=NA,nrow=nrow(df2),ncol=3)   #pre allocate memory
tmp <- as.numeric(df2)    #store the original data
changes <- 1
for (i in 2:nrow(df2)){    #always keep row 1, thus the loop starts at row 2

   if(ChangeDay(i)==TRUE){

     result[i,] <-tmp[i]     #store the row in result if ChangeDay(i)==TRUE
     changes <- changes + 1    #increment counter
   }
}
result <- result[1:changes,]
df[c(1,diff(df$num)) !=0,]
   name num num2
1   Joe   1    1
2  Mary   2    1
4 Frank   1    1
5 Carol   2    1
8   Jay   3    1