在R中跨两个数据帧生成重复的数据迭代
我试图用一个已经建立的语音测量矩阵来计算R中两组语音变量之间的距离。例如,我想对/p/和/b/进行测量,然后比较这两个语音单位之间的距离。我可以使用以下独特语音特征矩阵来实现这一点:在R中跨两个数据帧生成重复的数据迭代,r,for-loop,R,For Loop,我试图用一个已经建立的语音测量矩阵来计算R中两组语音变量之间的距离。例如,我想对/p/和/b/进行测量,然后比较这两个语音单位之间的距离。我可以使用以下独特语音特征矩阵来实现这一点: library(tibble) distinctive.feature.matrix <- tribble(~Symbol, ~Sonorant, ~Consonantal, ~Voice, ~Nasal, ~Degree, ~Labial, ~Palatal, ~Pharyngeal, ~
library(tibble)
distinctive.feature.matrix <- tribble(~Symbol, ~Sonorant, ~Consonantal, ~Voice, ~Nasal,
~Degree, ~Labial, ~Palatal, ~Pharyngeal, ~Round, ~Tongue, ~Radical,
"p", -1, 1, -1, -1, 1, 1, 0, -1, 1, 0, 0,
"b", -1, 1, 0, -1, 1, 1, 0, -1, 1, 0, 0,
"t", -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 0,
"d", -1, 1, 0, -1, 1, -1, 1, -1, -1, 1, 0,
"k", -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, 0,
"g", -1, 1, 0, -1, 1, -1, -1, -1, -1, -1, 0,
"f", -0.5, 1, -1, -1, 0, -1, 1, -1, 1, 0, 0,
"v", -0.5, 1, 0, -1, 0, -1, 1, -1, 1, 0, 0,
"θ", -0.5, 1, -1, -1, 0, -1, 1, -1, -1, 0, 0,
"ð", -0.5, 1, 0, -1, 0, -1, 1, -1, -1, 0, 0,
"s", -0.5, 1, -1, -1, 0, -1, 1, -1, -1, 1, 0,
"z", -0.5, 1, 0, -1, 0, -1, 1, -1, -1, 1, 0,
"h", -0.5, 1, 0, -1, 0, -1, -1, 1, -1, -1, -1,
"ʃ", -0.5, 1, -1, -1, 0, -1, 0, -1, -1, 0, 0,
"ʒ", -0.5, 1, 0, -1, 0, -1, 0, -1, -1, 0, 0,
"tʃ", -0.8, 1, -1, -1, 1, -1, 0, -1, -1, 0, 0,
"dʒ", -0.8, 1, 0, -1, 1, -1, 0, -1, -1, 0, 0,
"m", 0, 0, 1, 1, 1, 1, 0, -1, 1, 0, 0,
"n", 0, 0, 1, 1, 1, -1, 1, -1, -1, 1, 0,
"ŋ", 0, 0, 1, 1, 1, -1, -1, -1, -1, -1, 0,
"r", 0.5, 0, 1, 0, -1, -1, -1, 1, 1, -1, -1,
"l", 0.5, 0, 1, 0, -1, -1, 1, -1, -1, 1, 0,
"w", 0.8, 0, 1, 0, 0, 1, -1, -1, 1, -1, 0,
"j", 0.8, 0, 1, 0, 0, -1, 0, -1, -1, 0, 1)
库(TIBLE)
differential.feature.matrixdplyr软件包提供了有帮助的连接函数
对于production.data的每一行,您可以为每个C1_目标、C1_实际引入相应的功能,以创建一个大型TIBLE:
library(dplyr)
x <- production.data %>%
inner_join(distinctive.feature.matrix, by = c("C1_target"="Symbol")) %>%
inner_join(distinctive.feature.matrix, by = c("C1_actual"="Symbol"))
库(dplyr)
x%
内部连接(differential.feature.matrix,by=c(“C1_目标”=“符号”))%>%
内部连接(differential.feature.matrix,by=c(“C1_实际值”=“符号”))
请注意,有两个调用internal_join:一个用于获取与C1_目标对应的特性,第二个用于C1_实际的特性
新的tibble具有诸如Sonorant.x和Sonorant.y之类的列名,第一个对应于C1_目标,第二个对应于C1_实际
可以通过采用列名(不包括符号)创建要素名称列表:
features <- colnames(distinctive.feature.matrix)[-1]
功能谢谢!这里的一个问题(我在Q中没有指定)是,我还需要保留C1\u目标
和C1\u实际
列。在这一点上,数据看起来有点奇怪(当我使用完整的数据集时,有太多的0),但我不能说出问题出在哪里,因为我看不到哪一行是哪一行。但是谢谢你,这绝对是成功的!
features <- colnames(distinctive.feature.matrix)[-1]
diffs <- do.call(cbind, sapply(features, function(f) x[paste0(f, '.x')] - x[paste0(f, '.y')]))
colnames(diffs) <- features