我有以下 df
和用例,我想在所有行中查找并设置一些内容,其中存在另一行满足条件,例如
df <- data.frame(X=c('a','b','c'), Y=c('a','c','d'))
> df
X Y
1 a a
2 b c
3 c d
我想在另一行中找到那些Y值与X值相同的行。在上面的示例中,第 2 行为真,因为 Y = c
并且第 3 行有 X = c
。请注意,第 1 行不满足条件。
类似于:
df$Flag <- find(df, Y == X_in_another_row(df))
最佳答案
1
对于每个 Y
,我们检查 X
中的任何值(除了在同一行中)是否匹配。
sapply(1:NROW(df), function(i) df$Y[i] %in% df$X[-i])
#[1] FALSE TRUE FALSE
如果需要索引,请将整个内容包装在 which
which(sapply(1:NROW(df), function(i) df$Y[i] %in% df$X[-i]))
#[1] 2
2(未测试好)
df <- data.frame(X=c('a','b','c'), Y=c('a','c','d'), stringsAsFactors = FALSE)
temp = outer(df$X, df$Y, "==") #Check equality among values of X and Y
diag(temp) = FALSE #Set diagonal values as FALSE (for same row)
colSums(temp) > 0
#[1] FALSE TRUE FALSE
关于r - 数据帧 : How to compare current row to some other rows without looping?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45723103/