我已经记录了瞳孔大小以响应情绪与中性声音,这是两种颜色中的一种,我正在准备生长曲线分析的数据,我需要删除过度眨眼的试验,然后插入剩余的瞳孔值,以便最终版本没有NA值。
现在,我有一个带有一个ID变量(“声音”)的数据帧,一个度量(“pupilsize”)和3个变量(“时间”,“效价”和“颜色”)。
“time”变量从每个声音的0开始(每个声音代表1次试验)并以100(ms)的增量增加。 “价”和“颜色”每个声音都有一个值。
我想在测量“pupilsize”中消除每个试验中具有> 50%NA
值的所有行。
到目前为止,我试图使用reshape2
将文件转换为宽格式,如下所示:
widedata <-dcast(data, time ~ sound + valence + colour, value.var = "pupilsize")
这会生成声音,效价和颜色组合的列(例如,如果sound = x.wav,valence = 1且color = 2,则列标题为x.wav_1_2)
然后,我通过计算每个声音的NA
值的百分比并从数据帧中删除这些值,成功删除了> 50%NA
值的列。
我想使用melt
将这个修改过的宽格式文件转换回长格式。但是,我正在努力找到一种方法来拆分列标题并将它们变回“声音”,“价值”和“颜色”。
因此,我的问题是:有没有办法将标题以宽格式分割成它的组件(例如将x.wav_1_2转换为x.wav,1和2)?如果没有,有没有办法我可以从长格式删除> 50%NA
的试验而不重塑?
谢谢你对此有任何帮助!
编辑(数据示例):
原始的长格式(这是我希望数据看到结尾)
time valence pupilsize colour sound
1 0 1 45.43 2 1300s.wav
2 100 1 43.22 2 1300s.wav
3 200 1 41.42 2 1300s.wav
4 300 1 40.09 2 1300s.wav
.
.
.
51 5000 1 43.02 2 1300.wav
52 0 2 55.5 1 5461.wav
53 100 2 52.4 1 5461.wav
当我在上面的数据上运行dcast时的宽格式,时间作为id.var,颜色,价值和声音作为变量(pupilsize是度量)
time 1300s.wav_1_2 5461s.wav_2_1 ....
1 0 45.43 43.02
2 100 43.43 55.5
3 200 41.42 52.4
4 300 40.09 50.2
.
.
.
这是一个猜测:
library(dplyr)
group_by(your_data, sound) %>%
mutate(prop_na = sum(is.na(pupilsize)) / n()) %>%
filter(prop_na <= 0.5) %>%
select(-prop_na)
根据你的描述,它听起来不像valence
或colour
变量,所以这个过程忽略它们,按sound
ID分组,计算组级别的NA比例,并消除超过50%NA的组。它以删除临时列结束。