![](/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.