根据 R 中的多个条件有条件地删除重复项

  • 本文关键字:删除 有条件 条件 根据 r
  • 更新时间 :
  • 英文 :


现在我假设有下表:

.1 .2 .3
.2 1 C .2 1 C .2 1 C


.3 1 N .3 1 N .4 1 N .4 1 N .4 1 N
.4 1 N




我们只想保留第 3 列包含 C 的行,因为第 2 列是相同的,并且第 1 列的值是不同的。这应生成下表:

.1 .2 .3
.2 1 C .2 1 C .2 1 C


我已经看过以下问题:
根据第二列条件删除重复项 R,有条件地删除重复行
有条件
地删除 R 中的重复项

您知道如何实现这一目标吗?

我不确定我是否完全理解您需要做什么,但这是尝试使用一个简单的If语句来检查两列的方差,即

if (var(dd3$X1) != 0 & var(dd3$X2) == 0) { dd3 <- subset(dd3, X3 == 'C')}
dd3
#  X1 X2 X3
#1  2  1  C
#2  2  1  C
#3  2  1  C

哪里

dput(dd3)
structure(list(X1 = c(2L, 2L, 2L, 3L, 3L, 4L, 4L, 4L, 4L), X2 = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), X3 = structure(c(1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("C", "N"), class = "factor")), class = "data.frame", row.names = c(NA, -9L))

我不完全理解你所说的"鉴于第 2 列是相同的"是什么意思。您可以使用subset

subset(df, df$col3 == "C" & df$col1 != df$col2)

我使用 Col1、Col2 和 Col3 作为标题的地方

也许你可以尝试以下带有ave的基本 R 代码,即

dfout <- subset(df,as.logical(ave(X3,X1,X2,FUN = function(v) v=="C")))
# > dfout
#    X1 X2 X3
# 1  2  1  C
# 2  2  1  C
# 3  2  1  C

数据

df <- structure(list(X1 = c(2L, 2L, 2L, 3L, 3L, 4L, 4L, 4L, 4L), X2 = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), X3 = c("C", "C", "C", "N", "N", 
"N", "N", "N", "N")), row.names = c(NA, -9L), class = "data.frame")

最新更新