在R中用for循环生成词形语音特征值的两两差异矩阵
嘿,我来帮你搞定这个儿童语音产出特征差异矩阵的问题!其实不用纠结复杂的for循环,我们有更简洁高效的实现方式,下面给你演示几种适配不同需求的方案:
生成特征差异矩阵的R实现方案
方法一:用tidyverse做交叉连接(保留标签,贴合你的示例输出)
这种方法会先把数据集和自身做全量交叉配对,计算每一对行的特征差值,最后整理成你想要的带Target标签的矩阵格式,完全贴合你给出的示例输出风格。
library(tidyverse) # 先给每一行加个唯一标识,方便后续配对 values_with_id <- values %>% mutate(row_id = row_number()) # 生成所有行对的组合(每一行和其他所有行配对) cross_pairs <- values_with_id %>% crossing(values_with_id, .name_repair = ~c("row_id_i", "Target_i", "Actual_i", "C1_Sonorant_i", "C1_Consonantal_i", "row_id_j", "Target_j", "Actual_j", "C1_Sonorant_j", "C1_Consonantal_j")) # 计算两个特征的差值 diff_results <- cross_pairs %>% mutate( C1_Sonorant_diff = C1_Sonorant_i - C1_Sonorant_j, C1_Consonantal_diff = C1_Consonantal_i - C1_Consonantal_j ) # 整理成你要的C1_Sonorant差异矩阵 sonorant_matrix <- diff_results %>% select(Target_i, Target_j, C1_Sonorant_diff) %>% pivot_wider(names_from = Target_j, values_from = C1_Sonorant_diff) %>% rename(Target = Target_i) # 查看最终结果 sonorant_matrix
如果想要用Actual字段作为行列标签,只需要把代码里的Target_i/Target_j换成Actual_i/Actual_j就行。
方法二:用base R的outer函数(快速生成纯数值矩阵)
如果你只需要数值形式的差异矩阵,不需要保留文本标签,outer函数会是效率最高的选择——它专门用来实现向量间的两两运算:
# 提取特征列的向量 sonorant_vec <- values$C1_Sonorant consonantal_vec <- values$C1_Consonantal # 生成差异矩阵,指定减法运算 sonorant_diff_matrix <- outer(sonorant_vec, sonorant_vec, FUN = "-") consonantal_diff_matrix <- outer(consonantal_vec, consonantal_vec, FUN = "-") # 可选:给矩阵加上行列标签(用Target或Actual都可以) rownames(sonorant_diff_matrix) <- values$Target colnames(sonorant_diff_matrix) <- values$Target # 查看结果 sonorant_diff_matrix
如果你坚持要用for循环实现
当然如果你就是想尝试for循环的写法,思路也很清晰:先初始化一个空矩阵,然后用双重循环遍历每一对行,计算差值后赋值到对应位置:
# 获取数据行数,初始化空矩阵 n_rows <- nrow(values) sonorant_diff_loop <- matrix(NA, nrow = n_rows, ncol = n_rows) # 双重循环计算每一对的差值 for(i in 1:n_rows) { for(j in 1:n_rows) { sonorant_diff_loop[i,j] <- values$C1_Sonorant[i] - values$C1_Sonorant[j] } } # 给矩阵添加行列标签 rownames(sonorant_diff_loop) <- values$Target colnames(sonorant_diff_loop) <- values$Target
不过要注意,这种方法在数据量较大的时候,效率会比前面两种向量运算的方法低不少,所以更推荐前两种方案。
内容的提问来源于stack exchange,提问作者Catherine Laing
相关产品推荐
相关产品推荐

