Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在矩阵中的位置之间减去值_R - Fatal编程技术网

R 在矩阵中的位置之间减去值

R 在矩阵中的位置之间减去值,r,R,在下面的矩阵中,我想输出基于位置差异的变化值差异。示例:对于ID1,将位置1=1的平均变化值减去位置1=0的变化值 ID1位置1的输出 Position1= average(0.59-0.04+0.37) - average(-0.18) IDs Change Position1 Position2 ID1 0.5941262037 1 1 ID1 -0.0418420656 1 1

在下面的矩阵中,我想输出基于位置差异的变化值差异。示例:对于ID1,将位置1=1的平均变化值减去位置1=0的变化值

ID1位置1的输出

 Position1= average(0.59-0.04+0.37) - average(-0.18)


 IDs   Change       Position1    Position2
 ID1   0.5941262037     1           1    
 ID1  -0.0418420656     1           1   
 ID1   0.3766006166     1           1   
 ID1  -0.1842130385     0           0   
 ID2  -1.3847740208     0           0   
 ID2  -1.2668185169     0           1   
 ID2   1.8034297622     1           1   
 ...
编辑:

对于每个位置的每个ID,我的输出应该是一个值

ID1-1:


ID2-Position2:

根据
IDs
拆分数据帧,并对每个ID执行所需的操作似乎是最简单的方法

library(plyr)

X <- data.frame(IDs = c(1,1,1,1,2,2,2), change = 1:7, Position1 = c(1,1,1,0,0,0,1))

Y <- ddply(X, "IDs", function(df) {
  change.diff <-  mean(subset(df,Position1==1)$change) - 
                  mean(subset(df,Position1==0)$change)
})

Y
#    IDs   V1
# 1   1   -2.0
# 2   2    1.5
库(plyr)

X您可以对多个
Position
列使用
dplyr
tidyr

 library(dplyr)
 library(tidyr)

  dat %>% 
     gather(Var, Val, starts_with("Position")) %>% 
     group_by(IDs, Var) %>% 
     summarise(Mean=mean(Change[!!Val], na.rm=TRUE)-mean(Change[!Val], na.rm=TRUE)) %>%
     spread(Var, Mean)

   # IDs Position1 Position2
  #1 ID1 0.4938413 0.4938413
  #2 ID2 3.1292260 1.6530796
或者,您可以将
data.table
restrape2

  library(reshape2)
  library(data.table)

  DT <-  data.table(melt(dat, id.var=c("IDs", "Change")), key=c("IDs", "variable"))
  dcast(DT[, list(mean(Change[!!value], na.rm=TRUE)-mean(Change[!value], na.rm=TRUE)),
                 by=list(IDs, variable)], 
                          IDs~variable, value.var="V1")
   #  IDs Position1 Position2
   #1 ID1 0.4938413 0.4938413
   #2 ID2 3.1292260 1.6530796
数据
dat我想从熔化矩阵开始是个好主意?(-1)你想要的输出没有意义。谢谢,我认为这是个好办法是的。是否有一种简单的方法可以通过多个位置运行该功能?您是指字段
Position1
的多个值,还是指
Position2
Position3
等中的多个位置。?
   do.call(`rbind`,
        lapply(split(dat[,-1], dat$IDs), 
              function(x) {
                 apply(x[,-1], 2, function(y) mean(x[,1][!!y], na.rm=TRUE)-
                                               mean(x[,1][!y], na.rm=TRUE))}))
  #  Position1 Position2
  #ID1 0.4938413 0.4938413
  #ID2 3.1292260 1.6530796
 dat <- structure(list(IDs = c("ID1", "ID1", "ID1", "ID1", "ID2", "ID2", 
 "ID2"), Change = c(0.5941262037, -0.0418420656, 0.3766006166, 
 -0.1842130385, -1.3847740208, -1.2668185169, 1.8034297622), Position1 = c(1L, 
 1L, 1L, 0L, 0L, 0L, 1L), Position2 = c(1L, 1L, 1L, 0L, 0L, 1L, 
 1L)), .Names = c("IDs", "Change", "Position1", "Position2"), class = "data.frame",   row.names = c(NA, 
 -7L))