如何根据条件将特定行移动到新列中

  • 本文关键字:移动 新列中 何根 条件 r
  • 更新时间 :
  • 英文 :


我有一个数据帧,格式如下:

<表类> 时间 emg eda tbody><<tr>刺激80NANANANANA起始时间MAX (ch4)MAX (ch7)131.844500000000018.69296325795506827.8114367391085029142.830000000000012.0621982617939459.0520476734366273150.601499999999992.86457424031885078.6158402220299344NANANA刺激10NANANANANA起始时间MAX (ch4)MAX (ch7)134.259999999999991.49365286969821088.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

最新更新