根据单个单元格值从R数据帧中删除行

时间:2018-04-24 20:39:21

标签: r dataframe duplicates

我尝试使用R来隔离数据帧中单个列中的值,然后将行n的值与行n-1进行比较。如果行n等于行n-1,我想删除该行。例如:

ID   Time1   Time2
1    6       7
2    5       8
3    5       9
4    6       6

对于此示例,仅关注列Time1。我想删除观察3,因为此观察中的Time1的值与观察2中的相同。但是,我不想删除观察4,即使这里的Time1的值与观察1中的相同.I需要把重点放在观察n和观察n-1之间的比较上,而不是任何其他观察之前的比较。是否有一种简单的方法可以在R中完成这项工作?谢谢!

3 个答案:

答案 0 :(得分:1)

使用dplyr的选项:

library(dplyr)
df %>% dfplyr::filter( Time1 != lag(Time1, default = -Inf))

#   ID Time1 Time2
# 1  1     6     7
# 2  2     5     8
# 3  4     6     6

数据:

df <- read.table(text = 
"ID   Time1   Time2
1    6       7
2    5       8
3    5       9
4    6       6",
header = TRUE)

答案 1 :(得分:0)

您可以将Time1的延迟添加到数据框,然后过滤掉Time1 == Time1_lag的行。

以下是基于R:

的方法
df <- data.frame(ID = 1:4, Time1 = c(6, 5, 5, 6), Time2 = c(7, 8, 9, 6))
# Remove the last observation and put an NA for the first one to create the lag
df$Time1_lag <- c(NA, df$Time1[-nrow(df)])
# need to worry about the NA in the first row, so add an extra condition
df[df$Time1 != df$Time1_lag | is.na(df$Time1_lag), ]

以下是使用dplyr包执行此操作的方法:

library(dplyr)
df <- data.frame(ID = 1:4, Time1 = c(6, 5, 5, 6), Time2 = c(7, 8, 9, 6))
df %>% mutate(Time1_lag = lag(Time1)) %>% filter(Time1 != Time1_lag | is.na(Time1))

答案 2 :(得分:0)

评论中的代码说明

 $(".remove-item").on("click", function() {
        getSum();
        alert("This Onclick is working");
    });

在里面工作

df[!c(TRUE, diff(df$Time1)) == 0, ]