【发布时间】:2019-03-15 04:08:12
【问题描述】:
我有一个类似于下面创建的玩具数据集的大型数据框
df<-data.frame("ID"=c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B"),
'A_Frequency'=c(1,2,3,4,5,1,2,3,4,5), 'A_Axis'=c(1,2,3,4,5,1,2,3,4,5))
数据框由一个 ID 列和两列 A_Frequency 和 A_Axis 组成。 我创建了一个名为 A_Slope 的列并使用以下 for 循环填充它
id1<-unique(df$ID)###########Create list of unique IDs to subset the dataframe
在此循环中,我们计算 A_Slope 值,以便通过唯一 id 对数据帧 df 进行子集计算,然后从第二行到最后一行计算值,在所有情况下都忽略第一行
for( j in id1){
for( i in 2:nrow(df[df$ID==df$ID[df$ID%in%j],])){
df$A_Slope[df$ID==df$ID[df$ID%in%j]][i]=10*log(2,
10)*log((df$A_Axis[df$ID==df$ID[df$ID%in%j]][i])/
(df$A_Axis[df$ID==df$ID[df$ID%in%j]][i-1]), base =
10)/log((df$A_Frequency[df$ID==df$ID[df$ID%in%j]]
[i])/(df$A_Frequency[df$ID==df$ID[df$ID%in%j]][i-1]),base = 10 )}}
这适用于玩具套装。我有一个包含多列的大型数据框。是否可以使用 dplyr 使用 mutate 来做同样的事情。
预期输出
ID A_Frequency A_Axis A_Slope
1 A 1 1 NA
2 A 2 2 3.010299957
3 A 3 3 3.010299957
4 A 4 4 3.010299957
5 A 5 5 3.010299957
6 B 1 1 NA
7 B 2 2 3.010299957
8 B 3 3 3.010299957
9 B 4 4 3.010299957
10 B 5 5 3.010299957
注意:A_Slope 列中的两个 NA 值也可以为零 - 不一定是 NA
【问题讨论】:
-
你能用玩具示例的预期输出更新你的帖子吗?
-
已按要求进行编辑
-
您能否解释计算
A_Slope的规则是什么?我很难对您的代码进行去卷积,不幸的是,由于缺少任何缩进/空白/格式,它的可读性不太好。 -
斜率这个术语只是一个名称——不要与微积分中的 dy/df 混淆。将添加几个 cmets