用于比较数据框中的列的函数,提供有关现有差异的信息
Function for comparing colums in a dataframe, giving information about existing differences
我正在尝试编写一个函数来比较 a 的每一行中两个列(x 和 y)的值数据框。如果值相同,该函数应逐行比较,允许每对值的指定容差 z。
identical() 没有帮助,因为它不允许小的差异。
我也不能使用 all.equal(),因为它的 "tolerance" 参数与所有行的平均差有关,下面的示例就是如此。
> df <- data.frame("x"=c(1,2,3,4,5), "y"=c(2,7,3,4,5))
> df$diff_x_y <- df$x-df$y
> df
x y diff_x_y
1 1 2 -1
2 2 7 -5
3 3 3 0
4 4 4 0
5 5 5 0
> all.equal(df$x, df$y, scale=1,tolerance=4)
[1] TRUE
>
这就是我到目前为止所做的:
fun <- function (x, y, z)
{
diff <- abs(x-y) # compute difference for each row
tolerance <- ifelse(diff <= z, TRUE, FALSE) # test whether difference <= tolerance
return(summary(tolerance))
}
这适用于上面的示例数据框:
> fun(df$x,df$y,1)
Mode FALSE TRUE NA's
logical 1 4 0
现在我想要函数给我一些关于现有差异的信息。我的形象是这样的:
difference frequency
1:10 4
11:100 30
101:1000 350
"difference"应该定义差异的可调值范围,"frequency"应该显示具有相应差异的行数。
欢迎就返回有关差异的更详细信息的方式提出其他建议。请注意,我的原始数据框包含大约 2 mio。行,其中一些可能有很大差异。
恕我直言,最简单的方法是使用剪切:
df$diff.cat <- cut(abs(df$x-df$y),breaks=c(0,1,10,100,1000),right = FALSE)
right = FALSE 开关使间隔包括左(小)边距 -
0 <= 第一个区间 < 1
1 <= 秒间隔 < 10 等
你当然可以调整间隔
你可以看到
的频率
table(df$diff.cat)
所以基本上是为了:
df <- data.frame("x"=c(1,2,3,4,5), "y"=c(2,7,3,4,5))
table(cut(abs(df$x-df$y),breaks=c(0,1,10,100,1000),right = FALSE))
将给予:
[0,1) [1,10) [10,100) [100,1e+03)
3 2 0 0
我正在尝试编写一个函数来比较 a 的每一行中两个列(x 和 y)的值数据框。如果值相同,该函数应逐行比较,允许每对值的指定容差 z。 identical() 没有帮助,因为它不允许小的差异。 我也不能使用 all.equal(),因为它的 "tolerance" 参数与所有行的平均差有关,下面的示例就是如此。
> df <- data.frame("x"=c(1,2,3,4,5), "y"=c(2,7,3,4,5))
> df$diff_x_y <- df$x-df$y
> df
x y diff_x_y
1 1 2 -1
2 2 7 -5
3 3 3 0
4 4 4 0
5 5 5 0
> all.equal(df$x, df$y, scale=1,tolerance=4)
[1] TRUE
>
这就是我到目前为止所做的:
fun <- function (x, y, z)
{
diff <- abs(x-y) # compute difference for each row
tolerance <- ifelse(diff <= z, TRUE, FALSE) # test whether difference <= tolerance
return(summary(tolerance))
}
这适用于上面的示例数据框:
> fun(df$x,df$y,1)
Mode FALSE TRUE NA's
logical 1 4 0
现在我想要函数给我一些关于现有差异的信息。我的形象是这样的:
difference frequency
1:10 4
11:100 30
101:1000 350
"difference"应该定义差异的可调值范围,"frequency"应该显示具有相应差异的行数。 欢迎就返回有关差异的更详细信息的方式提出其他建议。请注意,我的原始数据框包含大约 2 mio。行,其中一些可能有很大差异。
恕我直言,最简单的方法是使用剪切:
df$diff.cat <- cut(abs(df$x-df$y),breaks=c(0,1,10,100,1000),right = FALSE)
right = FALSE 开关使间隔包括左(小)边距 -
0 <= 第一个区间 < 1
1 <= 秒间隔 < 10 等
你当然可以调整间隔 你可以看到
的频率table(df$diff.cat)
所以基本上是为了:
df <- data.frame("x"=c(1,2,3,4,5), "y"=c(2,7,3,4,5))
table(cut(abs(df$x-df$y),breaks=c(0,1,10,100,1000),right = FALSE))
将给予:
[0,1) [1,10) [10,100) [100,1e+03)
3 2 0 0