首页 > 解决方案 > 使用 R 比较来自不同列但来自相同数据框的元素

问题描述

我正在尝试确定序列相似性。我想创建一个函数来比较df元素,例如:

   V1  V2 V3  V4
1  C   D  A   D  
2  A   A  S   E 
3  V   T  T   V
4  A   T  S   S 
5  C   D  R   Y 
6  C   A  D   V
7  V   T  E   T 
8  A   T  A   A
9  R   V  V   W
10 W   R  D   D
  

我想将第一列中的第一个元素与第二列中的第一个元素进行比较。如果匹配 == 1,否则为 0。然后将第一列中的第二个元素与第二列中的第二个元素进行比较。等等。

例如:

C != D -----0
A == A -----1

这样,我想将第 1 列与第 2 列进行比较,然后将第 3 列和第 4 列进行比较。然后将第 2 列与第 3 列和第 4 列进行比较。然后将第 3 列与第 4 列进行比较。

输出将只是数字:

0
1
0
0
0
0
0
0
0
0

我尝试了以下方法,但它不起作用:

compared_df <- ifelse(df_trial$V1==df_trial$V2,1,ifelse(df_trial$V1==df_trial$V2,0,NA))
compared_df

按照建议,我尝试了以下方法:

compared_df1 <- df_trial$matches <- as.integer(df_trial$V1 == df_trial$V2)

这适用于小样本比较。有没有办法在全球范围内进行更多比较?就像更新的列一样。

标签: rdataframecompare

解决方案


正如@Ronak Shah 在评论中所说,在您想要比较 2 个值的情况下,使用以下内容就足够了:

df$matches <- as.integer(df$V1 == df$V2)

另一个适用于更多 2 行的选项是使用apply以下方式检查一行中唯一元素的数量:

df$matches = apply(df, 1, function(x) as.integer(length(unique(x)) == 1))

推荐阅读