![](/img/trans.png)
[英]How to change values across multiple columns using a value conversion dataframe in R with dplyr
[英]Use dplyr to change an R dataframe from second row across multiple columns
我有一个大型数据框,类似于下面创建的玩具数据集
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替换为数据帧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
希望我已经正确翻译了您的代码。
library(dplyr)
df %>%
group_by(ID) %>%
mutate(A_Slope = 10 * log10(2) * log10(A_Axis/lag(A_Axis))/
log10(A_Frequency/lag(A_Frequency)))
# ID A_Frequency A_Axis A_Slope
# <fct> <dbl> <dbl> <dbl>
# 1 A 1 1 NA
# 2 A 2 2 3.01
# 3 A 3 3 3.01
# 4 A 4 4 3.01
# 5 A 5 5 3.01
# 6 B 1 1 NA
# 7 B 2 2 3.01
# 8 B 3 3 3.01
# 9 B 4 4 3.01
#10 B 5 5 3.01
一些了解代码的指针
log(x, 10)
替换为log10(x)
i - 1
),我们在这里使用lag
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.