我在R中有一个数据帧,其中有很多行(超过3000行),其中有话语的F0(基本频率)轨道。这些行中包含以下信息:说话者ID,组号,重复号,重音类型,性别,然后是50列F0点。数据如下所示:
Speaker Sex Group Repetition Accent Word 1 2 3 4
105 M 1 1 N AILMENT 102.31030 102.31030 102.31030 102.31127
105 M 1 1 N COLLEGE 111.80641 111.80313 111.68612 111.36020
105 M 1 1 N FATHER 124.06655 124.06655 124.06655 124.06655
但是,它不仅要转到X4,而且每行有50个点,所以我有3562x56的数据帧。我想对其进行更改,以便F0轨道中的每一列数据(因此字后从1:50开始)都具有自己的列,并将关联的列号作为另一行。我想将所有信息也与每个数据点一起保存在前六列中,因此看起来像这样:
Speaker Sex Group Repetition Accent Word Num F0
105 M 1 1 N AILMENT 1 102.31030
105 M 1 1 N AILMENT 2 102.31030
105 M 1 1 N AILMENT 3 102.31030
105 M 1 1 N AILMENT 4 102.31127
...
105 M 1 1 N COLLEGE 1 111.80641
105 M 1 1 N COLLEGE 1 111.80313
105 M 1 1 N COLLEGE 1 111.68612
105 M 1 1 N COLLEGE 1 111.36020
...
我尝试使用的代码虽然很乏味,但如下所示:
x = 1
for (i in 1:dim(normrangef0)[1]) {
for (j in 1:50) {
norm.all$Speaker[x] <- normrangef0$Speaker[i]
norm.all$Sex[x] <- normrangef0$Sex[i]
norm.all$Group[x] <- normrangef0$Group[i]
norm.all$Repetition[x] <- normrangef0$Repetition[i]
norm.all$Word[x] <- normrangef0$Word[i]
norm.all$Accent[x] <- normrangef0$Accent[i]
norm.all$Time[x] <- j
norm.all$F0[x] <- normrangef0[i,j+6]
x = x+1
}
}
但是,当我使用norm.all作为NULL对象(仅由norm.all = c()定义)执行此操作时,最终得到超过200k项的列表,其中许多都是NA。当我将norm.all定义为数据帧(在178100x8数据帧中为空1或全0之一时,出现错误:
错误
$<-.data.frame
(*tmp*
“扬声器”,值= 105L):替换已1行,数据具有0
我的代码完全关闭了吗?还有另一种方法吗?
使用melt
从“reshape2”
library(reshape2)
melt(mydf, id.vars=c("Speaker", "Sex", "Group", "Repetition", "Accent", "Word"))
# Speaker Sex Group Repetition Accent Word variable value
# 1 105 M 1 1 N AILMENT 1 102.3103
# 2 105 M 1 1 N COLLEGE 1 111.8064
# 3 105 M 1 1 N FATHER 1 124.0666
# 4 105 M 1 1 N AILMENT 2 102.3103
# 5 105 M 1 1 N COLLEGE 2 111.8031
# 6 105 M 1 1 N FATHER 2 124.0666
# 7 105 M 1 1 N AILMENT 3 102.3103
# 8 105 M 1 1 N COLLEGE 3 111.6861
# 9 105 M 1 1 N FATHER 3 124.0666
# 10 105 M 1 1 N AILMENT 4 102.3113
# 11 105 M 1 1 N COLLEGE 4 111.3602
# 12 105 M 1 1 N FATHER 4 124.0666
在基数R中,您还可以stack
用于堆叠名为1到4的列以及cbind
第一组列。或者,unlist
也可以这样做。
您可能还需要查看“ data.table”包,以提高速度。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句