将剩余数据帧除以矢量

时间:2019-02-25 16:55:35

标签: r logging matrix vector

我有一个68 x 252的数据帧。我试图找到每个矢量相对于第一个矢量之间的对数变化。例如,如果v1 = 68且v2,v3,v4 = 70、71、72 ...我希望新数据帧输出为0、0.013、0.019、0.025。

data<-data[3:nrow(data)]/data[2:2]

返回

  

“ Ops.data.frame(data [3:nrow(data)],data [2:2])中的错误:仅‘/’   为相等大小的数据帧定义”

我也尝试过制作每个自己的矩阵

div<-as.vector(data[2:2])
num<-as.matrix(data[3:nrow(data)])
test<-num/div

返回:

  

num / div中的错误:不符合标准的数组

log(num/div)

1 个答案:

答案 0 :(得分:0)

我认为data.frames比矩阵更易于使用。我喜欢将问题的每个步骤都保留在不同的data.frame中,因此如果需要可以轻松地追溯到某个步骤,而且我可以清楚地看到每个转换都做了什么。

如果我们从一些示例数据开始(尽管通常您会使用read.csv或类似的文件从文件中读取数据)

#get data as a data frame
df <- structure(list(v1 = c(68, 120), v2 = c(70, 121), v3 = c(71, 122), v4 = c(72, 123)), class = "data.frame", row.names = c("row1", "row2"))

df
      v1  v2  v3  v4
row1  68  70  71  72
row2 120 121 122 123

转换为log(base10):

#take log (base 10) of data frame
df_log <- log10(df)

df_log
           v1       v2       v3       v4
row1 1.832509 1.845098 1.851258 1.857332
row2 2.079181 2.082785 2.086360 2.089905

最后一步...

df_ans <- df_log[,] - df_log[,1] 

这意味着,从日志数据帧df_log[,]的每一行和每一列中减去第一列df_log[,1]的值,并将结果存储在df_ans中。

结果:

df_ans
     v1          v2          v3         v4
row1  0 0.012589127 0.018749436 0.02482358
row2  0 0.003604124 0.007178585 0.01072387

注意:最后一项操作必须用两个不同的数据帧df_ansdf_log完成。如果您尝试在df_log <- df_log[,] - df_log[,1]之类的同一data.frame上全部执行此操作,则它将无法正常工作,因为df_log[,1]将在操作中被修改为0,然后您将减去{ {1}}不能正常工作的所有单元格!