从长格式数据框中删除带有> 50%NA值的试验

时间:2015-06-29 17:21:21

标签: r reshape2 melt

我已经记录了瞳孔大小以响应情绪与中性声音,这是两种颜色之一,我正在准备生长曲线分析的数据,我需要删除过度眨眼的试验,然后插入剩余的瞳孔值所以最终版本没有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    
.
.
.   

1 个答案:

答案 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)

根据您的说明,它听起来不像valencecolour个变量,因此此过程会忽略它们,按sound ID分组,计算NA比例小组级别,并消除超过50%的国家组织。它以删除临时列结束。