我有一对具有相同后缀的变量,并希望比较和生成Y或N标志。我可以一个接一个地输入条件,但只是想知道是否有更好的方法来使用apply函数。
我更喜欢使用数据的解决方案。表包。
x <- data.table(x_abc="A1", y_abc="A1", x_pqr="A1", y_pqr="B1")
x[,':='(abc=ifelse(x_abc==y_abc,"Y","N"), pqr=ifelse(x_pqr==y_pqr,"Y","N"))]
您可以创建两个列名向量,并使用Map
-
library(data.table)
x_cols <- grep('^x', names(x), value = TRUE)
y_cols <- grep('^y', names(x), value = TRUE)
new_cols <- sub('x_', '', x_cols)
x[, (new_cols) := Map(function(a, b) ifelse(a == b, 'Y', 'N'),
.SD[, ..x_cols], .SD[, ..y_cols])]
x
# x_abc y_abc x_pqr y_pqr abc pqr
#1: A1 A1 A1 B1 Y N