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

问题描述 投票:0回答:1

我已经记录了瞳孔大小以响应情绪与中性声音,这是两种颜色中的一种,我正在准备生长曲线分析的数据,我需要删除过度眨眼的试验,然后插入剩余的瞳孔值,以便最终版本没有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    
.
.
.   
r reshape2 melt
1个回答
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%NA的组。它以删除临时列结束。

© www.soinside.com 2019 - 2024. All rights reserved.