我已经记录了瞳孔大小以响应情绪与中性声音,这是两种颜色之一,我正在准备生长曲线分析的数据,我需要删除过度眨眼的试验,然后插入剩余的瞳孔值所以最终版本没有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)?
如果没有,有没有办法可以从长格式删除&gt; 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
.
.
.
答案 0 :(得分: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%的国家组织。它以删除临时列结束。