【问题标题】:Comparing elements from different columns but from the same data frame with R使用 R 比较来自不同列但来自相同数据框的元素
【发布时间】:2020-10-19 04:21:38
【问题描述】:

我正在尝试确定序列相似性。 我想创建一个函数来比较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)

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

【问题讨论】:

  • 那就是df$matches &lt;- as.integer(df$V1 == df$V2)

标签: r dataframe compare


【解决方案1】:

正如@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))

【讨论】:

  • 感谢您的建议。第一个适用于小样本的比较。对于“应用”的第二个选项,我试图确定它们是否匹配。 'apply()' 仍然适用吗?
  • @student24 是的,当然取决于您希望达到的目标。但是两种方法都给出了相同的结果,只是第二个选项适用于您想要比较超过 2 列的情况
猜你喜欢
  • 1970-01-01
  • 2023-02-03
  • 2019-12-13
  • 2022-01-12
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 2017-04-26
  • 2020-03-09
相关资源
最近更新 更多