我有一个关于使用mutate_each
在我的数据框中应用function
的问题。
我有一个可以计算两个波形y1
和y2
之间相位差的函数。我想将此函数应用于我的数据并创建一个名为phase
的新列,但是我得到了一个错误,说其中一个参数y2
丢失,尽管我已经将它们放在了我的function
中。
也许我不擅长编写函数:)
这里是一个可重现的示例:
library(dplyr)
library(psd) # Loaded psd (1.0.1) -- Adaptive multitaper spectrum estimation
time <- seq(1,30)
y1 <- sort(runif(30,-0.014,0.014),decreasing=TRUE)
y2 <- sort(runif(30,-0.012,0.012),decreasing=TRUE)
df <- data.frame(y1,y2,time)
#calculation phase difference between two waves y1 and y2
phase_diff <- function(y1,y2,time){
out1=pspectrum(y1*(-1),x.frqsamp = 0.1);
out2=pspectrum(y2*(-1),x.frqsamp = 0.1);
f1 = out1$freq[which.min(out1$spec)];
f2 <- out2$freq[which.min(out2$spec)];
fit1 <- lm(y1 ~ sin(2*pi*f1*time)+cos(2*pi*f1*time));
fit2 <- lm(y2 ~ sin(2*pi*f2*time)+cos(2*pi*f2*time));
a1 <- fit1$coefficients[2];
b1 <- fit1$coefficients[3];
ph1 <- atan(b1/a1);
a2 <- fit2$coefficients[2];
b2 <- fit2$coefficients[3];
ph2 <- atan(b2/a2);
phase_difference <- as.numeric((ph2-ph1)/pi);
return(phase_difference)
}
dff <- df%>%
mutate_each(funs(phase_diff),phase=c(y1,y2,time))
Stage 0 est. (pilot)
environment ** .psdEnv ** refreshed
detrending (and demeaning)
Stage 1 est. (Ave. S.V.R. -10.9 dB)
Stage 2 est. (Ave. S.V.R. -8.3 dB)
Stage 3 est. (Ave. S.V.R. -8.3 dB)
Stage 4 est. (Ave. S.V.R. -8.3 dB)
Stage 5 est. (Ave. S.V.R. -8.3 dB)
Normalized single-sided psd estimates ( psd ) for sampling-freq. 0.1
Error: argument "y2" is missing, with no default
dplyr
链中,我还有其他事情要做。因此,我想坚持使用mutate_each
:) - Alexanderdplyr
链中执行其他操作,可以使用mutate
(根据所示示例)。 - akrunmutate_each
不起作用呢? - Alexander