如何为数据框中指定列正确应用fft函数?解决非数值参数错误
解决FFT函数非数值参数错误问题
错误原因
fft()函数仅接受数值型向量作为输入,你选中的以"EE"开头的列(第3-92列)大概率是字符、因子或其他非数值类型,导致触发non-numeric argument错误。
分步解决方案
1. 检查目标列的数据类型
先确认哪些EE开头列是非数值型:
# 查看所有EE开头列的类型 sapply(LiC13j_w20_dat_dat2 %>% select(starts_with("EE")), class)
2. 将非数值列转换为数值型
如果列是因子或字符类型,先转换为数值(转换失败的内容会变为NA,可后续按需处理):
library(dplyr) LiC13j_w20_dat_dat2 <- LiC13j_w20_dat_dat2 %>% mutate(across(starts_with("EE"), ~as.numeric(as.character(.x))))
注:如果是因子列,必须先转字符再转数值,否则会被转为因子的水平编码(不是原始数值)。
3. 批量应用FFT并生成新列
用dplyr::across批量处理,比循环更简洁高效,适配tibble结构:
# 对所有EE开头列应用FFT,生成带_fft后缀的新列 LiC13j_w20_dat_dat2 <- LiC13j_w20_dat_dat2 %>% mutate(across(starts_with("EE"), ~fft(.x), .names = "{col}_fft"))
原脚本的问题说明
- 第一种循环:
LiC13j_w20_dat_dat2$fft[i]的索引逻辑错误,tibble的$不能用数字索引,且你需要为每列生成单独的FFT列,而非一个名为fft的列;同时未处理非数值类型问题。 - 第二种循环:未提前处理非数值列,即使列名匹配,非数值输入仍会触发
fft()报错。
内容的提问来源于stack exchange,提问作者Debajyoti Kabiraj
相关产品推荐
相关产品推荐

