我有一个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)
答案 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_ans
和df_log
完成。如果您尝试在df_log <- df_log[,] - df_log[,1]
之类的同一data.frame上全部执行此操作,则它将无法正常工作,因为df_log[,1]
将在操作中被修改为0
,然后您将减去{ {1}}不能正常工作的所有单元格!