我有下面的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))
发布于 2017-08-16 21:39:45
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
发布于 2017-08-16 21:30:19
which(match(df$Y,df$X)!=1:nrow(df))
发布于 2017-08-16 21:55:50
我觉得这个应该管用。
df <- data.frame(X= c(1,2,3,4,5,3,2,1), Y = c(1,2,3,4,5,6,7,8))
which(with(df, (X %in% Y) & (X != Y)))
在原始data.frame上工作,如果我们设置了stringsasfactors=FALSE
df <- data.frame(X=c('a','b','c'), Y=c('a','c','d'), stringsAsFactors = F)
which(with(df, (X %in% Y) & (X != Y)))
https://stackoverflow.com/questions/45723103
复制相似问题