我有一个data.frame带有40系列的R,我想选择成对系列来应用一个功能,(即系列1和系列21,系列2和系列22).但是我收到以下代码的错误:
for(i in 1:ncol(Date)) {
pairwise <-Date[, c(i,i+20)]
}
Run Code Online (Sandbox Code Playgroud)
我想pairwise在其他功能中使用.
有人可以帮帮我吗?
预先感谢
这是因为您在i> 20 时请求高于40的列.请参阅此示例:
set.seed(1)
DF <- data.frame(matrix(rnorm(40*100), ncol = 40))
## simple function to apply/use
foo <- function(x1, x2) return(x1 - x2)
## something to hold results
res <- matrix(ncol = ncol(DF), nrow = nrow(DF))
## loop - oops error
for(i in seq_len(ncol(DF))) {
res[,i] <- foo(DF[,i], DF[,i+20])
}
Run Code Online (Sandbox Code Playgroud)
你收到这个错误:
Error in `[.data.frame`(DF, , i + 20) : undefined columns selected
Run Code Online (Sandbox Code Playgroud)
这是因为i取值1,...,40.一旦i> = 21,(i + 20)> 40,你只有40列数据.一个简单的修改是仅循环前20列:
## something to hold results
res <- matrix(ncol = ncol(DF) / 2, nrow = nrow(DF))
for(i in seq_len(ncol(DF)/2)) {
res[,i] <- foo(DF[,i], DF[,i+20])
}
Run Code Online (Sandbox Code Playgroud)
如果你想要的只是col 1和col 21,col 2和col 22等.如果你想要所有成对比较,那么你需要尝试不同的东西,因为单个循环不起作用.
(在有人把我拉得非常低效地使用一个循环之前,那个例子就是这个,一个没有想象力的例子应用于该函数foo().在这种情况下,DF[, 1:20] - DF[, 21:40]将得到与中相同的结果res.)