删除一行并重新计算R ^ 2

时间:2013-03-29 16:32:02

标签: r row ignore

我在R中编写了以下代码: 用户选择包含2列(V1和V2)的文件,包含大量行(行数因输入文件而异) 该脚本计算2个变量之间关系的rsq。根据输入文件,可以有10到1000行数据。

我想编写以下代码: 代码应遍历所有行,一次删除/省略/忽略一行,并在缺少此行的情况下计算新的rsq。所以,例如:

共有10行数据,总rsq = 0.97 步骤1:从等式中移除第一行数据        再次计算rsq,但这次是9行,给出rsq = 0.98 步骤2:重新添加第1行,删除第2行        rsq再次计算 第3步:重新添加第二行,删除第三行        rsq再次计算

每次循环后,新的rsq"将被放置在已删除行旁边的新列中。

任何人都可以建议如何做到这一点?我有这个编码在excel,它运作良好,但很麻烦,因此不理想。

1 个答案:

答案 0 :(得分:1)

你想做这样的事吗?

# Make some sample data
set.seed(1095)
data <- data.frame( V1 = 1:10 , V2 = sample.int(5 ,10 ,repl = TRUE ) )

# Use sapply to get r2 removing each row at a time
r2 <- sapply( 1:nrow(data) , function(x) ( cor( data[-x,1] , data[-x,2] ) )^2 )
# Combine into a data frame
newdata <- cbind( data , r2 )
newdata
#      V1 V2        r2
#   1   1  5 0.2526316
#   2   2  3 0.4657601
#   3   3  5 0.3204721
#   4   4  5 0.3691612
#   5   5  1 0.5405405
#   6   6  3 0.3769480
#   7   7  3 0.3840426
#   8   8  2 0.3409425
#   9   9  1 0.2725806
#   10 10  3 0.4986702