R 从TIBLE中的行1中减去行2

R 从TIBLE中的行1中减去行2,r,dataframe,tibble,R,Dataframe,Tibble,我在R中有一个tibble对象,如下所示: 对于每一列,我想从第2行中减去第1行。我目前的做法如下: mean.diff <- each.group.mean[1,2:num.groups]-each.group.mean[2,2:num.centroids] mean.diff unlist(each.group.mean[1,2:num.groups], use.names = FALSE)- unlist(each.group.mean[2,2:num.centroids

我在R中有一个tibble对象,如下所示:

对于每一列,我想从第2行中减去第1行。我目前的做法如下:

mean.diff <- each.group.mean[1,2:num.groups]-each.group.mean[2,2:num.centroids]

mean.diff

unlist(each.group.mean[1,2:num.groups], use.names = FALSE)-
    unlist(each.group.mean[2,2:num.centroids], use.names = FALSE)
原因是
data.frame
tibble
等具有许多类属性,这使得执行子集和计算的速度变慢。通过转换为
vector
,所有这些类都被剥离。使用可复制的示例

数据
如何使用
unlist
it和substract,即
unlist(each.group.mean[1,2:num.groups],use.names=FALSE)-unlist(each.group.mean[2,2:num.centroids],use.names=FALSE)
A
tibble
data.frame
等都有额外的类属性,这会使其速度变慢。因此,最好的选择可能是
取消列出
向量
,然后对两个向量进行减法。
set.seed(24)
df1 <- as.tibble(as.data.frame(matrix(sample(1:10, 9660*10, 
     replace = TRUE), ncol = 9660)))
system.time(df1[1,] - df1[2,])
#   user  system elapsed 
#   0.78    0.00    0.78 

system.time(unlist(df1[1,], use.names = FALSE) - unlist(df1[2,], use.names = FALSE))
#   user  system elapsed 
#   0.03    0.00    0.03