如果它与R

时间:2016-10-13 08:45:24

标签: r dataframe data-manipulation

我在R

中有以下数据框
df <- read.table(text = "
        A   B   C   D    E
                 14  6   8   16  14
                 5   6   10  6   4
                 2   4   6   3   4
                 26  6   18  39  36
                 1   2   3   1   2
                 3   1   1   1   1
                 3   5   1   4   11
                 ", header = TRUE)

现在,如果最后两行中的值相同,我需要将这些值替换为0,如果在R中可行,任何人都可以帮助我

例如: 第1列中最后两行的值为3,因此我需要将0替换为0。 同样对于第3列,第3列的最后两行是1,所以我需要将3替换为0。

3 个答案:

答案 0 :(得分:4)

您可以比较最后两行并替换值相同的列:

nr <- nrow(df)
df[(nr-1):nr, df[nr-1, ]==df[nr, ]] <- 0

df
#   A B  C  D  E
#1 14 6  8 16 14
#2  5 6 10  6  4
#3  2 4  6  3  4
#4 26 6 18 39 36
#5  1 2  3  1  2
#6  0 1  0  1  1
#7  0 5  0  4 11

答案 1 :(得分:1)

一种选择是遍历列,检查if最后两个元素(tail(x,2))或重复,然后replace以0或else返回列并将输出分配回数据集。 []确保结构完整。

df[] <- lapply(df, function(x) if(anyDuplicated(tail(x, 2))>0) 
                 replace(x, c(length(x)-1, length(x)), 0) else x)
df
#   A B  C  D  E
#1 14 6  8 16 14
#2  5 6 10  6  4
#3  2 4  6  3  4
#4 26 6 18 39 36
#5  1 2  3  1  2
#6  0 1  0  1  1
#7  0 5  0  4 11

答案 2 :(得分:1)

你也可以这样做:

r <- tail(df, 2)
r[,r[1,]==r[2,]] <- 0
df <- rbind(head(df, -2), r)