R 删除重复的行子集
我有一个按日期排序的索引中的股票列表,我正在尝试删除前一行具有相同股票代码的所有行。这将给出初始索引的数据帧以及索引发生更改的所有日期 在我的工作示例中,我将使用名称而不是日期列,以及一些数字 起初,我认为可以使用subset()和删除行!复制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)
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