我在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。
答案 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)