比较具有相似名称的列的值,看看它们是否相同

问题描述 投票:0回答:1

举个例子,我有这个 df:

df <- data.frame(
  DAY.x = c(1,2,3,4,5),
  DAY = c(1,2,3,4,5),
  MONTH.x = c("JAN", "FEB", "MAR", NA, NA),
  MONTH = c("JUN", "JUL", "AUG", NA, NA)
)

我想要一种快速的方法来比较具有相似名称的列并查看它们是否相等。我可以像这样手动完成:

with(df, any(DAY.x != DAY))
with(df, any(MONTH.x != MONTH))

但是有没有更快/更有效的方法来实现自动化?在本例中,我想将带有“.x”后缀的列与不带“.x”后缀的列进行比较。像使用 lapply 这样的快速工具可以轻松显示结果并查看哪些对不相等,但很难编写此逻辑。谢谢。

r
1个回答
0
投票

您可以创建两个具有列名称的向量进行比较,这将返回逻辑值矩阵。

x_cols <- grep('.x', names(df), fixed = TRUE, value = TRUE)
cols <- sub('.x', '', x_cols, fixed = TRUE)
df[x_cols] != df[cols]

#     DAY.x MONTH.x
#[1,] FALSE    TRUE
#[2,] FALSE    TRUE
#[3,] FALSE    TRUE
#[4,] FALSE      NA
#[5,] FALSE      NA

您可以使用

rowSums
来计算连续
TRUE
的数量。

rowSums(df[x_cols] != df[cols], na.rm = TRUE)
#[1] 1 1 1 0 0
© www.soinside.com 2019 - 2024. All rights reserved.