我有一个数据帧,格式如下:
<表类>
时间
emg
eda
tbody><<tr>刺激80 NA NA NA NA NA 起始时间 MAX (ch4) MAX (ch7) 131.844500000000018.6929632579550682 7.8114367391085029 142.830000000000012.062198261793945 9.0520476734366273 150.601499999999992.8645742403188507 8.6158402220299344 NA NA NA 刺激10NA NA NA NA NA 起始时间 MAX (ch4) MAX (ch7) 134.259999999999991.4936528696982108 8.6331626452321366 表类>
不是最优雅的方式…使用reshape2
df=structure(list(time = c("Stimulus 80", NA, "Onset time", "131.84450000000001",
"142.83000000000001", "150.60149999999999", NA, "Stimulus 10",
NA, "Onset time", "134.25999999999999"), emg = c(NA, NA, "MAX (ch4)",
"8.6929632579550682", "2.062198261793945", "2.8645742403188507",
NA, NA, NA, "MAX (ch4)", "1.4936528696982108"), eda = c(NA, NA,
"MAX (ch7)", "7.8114367391085029", "9.0520476734366273", "8.6158402220299344",
NA, NA, NA, "MAX (ch7)", "8.6331626452321366")), class = "data.frame", row.names = c(NA,
-11L))
library(reshape2)
df1=melt(
df,
id.vars="time",
measure.vars=c("emg","eda")
)
tmp=grepl("Stimulus",df1$time)
df1$g=cumsum(tmp)
df1=merge(
df1,
setNames(
df1[tmp,c("time","g")],
c("name","g")
),
by="g",
all=T
)
df1$name=paste0(
df1$variable,
sapply(strsplit(df1$name," "),"[[",2)
)
dcast(
df1[grepl("^\d+",df1$time),],
time~name,
value.var="value"
)
的
time eda10 eda80 emg10 emg80
1 131.84450000000001 <NA> 7.8114367391085029 <NA> 8.6929632579550682
2 134.25999999999999 8.6331626452321366 <NA> 1.4936528696982108 <NA>
3 142.83000000000001 <NA> 9.0520476734366273 <NA> 2.062198261793945
4 150.60149999999999 <NA> 8.6158402220299344 <NA> 2.8645742403188507