共同映射同一数据框的行

时间:2019-03-27 09:06:10

标签: mysql r

A  B  C
1  2  3
4  2  3
1  2  3

我想比较row1与row2,row2与row3,以此类推rown与row1。 如果它们相同,我要在另一个数据框中将其打印为“相同”或“不同”

上表的输出:

A            B         C
Different    same      same
Different    same      same
same         same      same

对于下面的代码,我得到

输出为True或false。我要替换为Different and same。

compare = t(combn(nrow(Data.matrix),2,FUN=function(x)we2009[x[1],]==Data.matrix[x[2],]))
rownames(compare) = combn(nrow(Data.matrix),2,FUN=function(x)paste0("seq",x[1],"_seq",x[2]))
View(compare)

2 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点,

由于您添加了MySQL标签,最简单的方法是在列数有限的情况下使用sql进行操作,因此您也可以在r中使用包SQL

library(sqldf)
sqldf('select 
    case when a=b then 'same' else 'different' as a
    case when b=c then 'same' else 'different' as b
    case when c=a then 'same' else 'different' as c
    from my_dataset'

答案 1 :(得分:0)

这能达到预期的结果吗?

data_test = data.frame(A = c(1,4,1), B = c(2,2,2), C = c(3,3,3)) 

# create shifted helper-columns 
data_test_help = cbind(data_test, data_test[c(2:NROW(data_test), 1),])
# apply comparision on each row
t(apply(data_test_help,1, function(f) f[1:3] == f[4:6]))
# for same, different notation instead of true false
t(apply(data_test_help,1, function(f)  ifelse(f[1:3] == f[4:6], "same", "Different")))