r - 使用 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)
这适用于小样本比较。有没有办法在全球范围内进行更多比较?就像更新的列一样。
解决方案
正如@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))
推荐阅读
- typescript - TS中的keyof数组类型很奇怪
- python - TKinter 线程 - 如何使用进度条返回值
- php - 如何在 Laravel 的动态网页上显示动态导航栏?
- php - 无法在 Windows 上运行 webpack-encore
- visual-studio-code - 如何保存tasks.json和launch.json以供以后在vscode中使用?
- ffmpeg - ffmpeg concat 因 dts 计时错误而失败
- c# - 无法在 Visual Studio 2017 中使用任何 CPU 进行调试,ntdll.dll 访问冲突写入位置
- geometry - 将 x,y 坐标从米单位转换为适当的单位以进行绘图
- arrays - 如何从c中的数组打印字符串?
- azure - 如何在条件下访问管道变量