在此文件:https://github.com/pb865/exmaplefile
这些是来自行为任务的数据,其中事件代码 (
ecode
) 列下的 30 和 31 指的是响应,任何小于 30 的都是刺激。对于某些试验,参与者在目标刺激(20、21 和 22 码)后没有及时做出反应,因此没有相关的反应代码。但是,我需要添加一些空白行并明确表明该试验没有做出任何回应。
我尝试过的:
library(dplyr)
myevents = read.csv(data)
myevents2=myevents[myevents$ecode>=20 & myevents$ecode<30 & lead(myevents$ecode<20),]
myrows = as.numeric(row.names(myevents2)
for(i in 1:length(myrows)){
myevents3 <- add_row(df, .after = i)
}
myevents2=myevents[myevents$ecode>=20 & myevents$ecode<30 & lead(myevents$ecode<20),]
myrows=as.numeric(myevents2$item)
myevents3=data.frame()
for(i in 1:length(myevents$item)){
if(myevents$item[i] %in% myrows){
myevents3 <- add_row(myevents, .after=i)
}
}
最终输出应该看起来相同,除了在
myevents
中包含在 myevents2
数据子集中的每行之后插入空白行。
这些都不起作用。我不太确定从这里该去哪里。如有任何帮助,我们将不胜感激!
回答你的问题:
df <- read.csv("data.csv")
# Find the index of each row that satisfies the ecode constraint
rows <- which(df$ecode < 30 & df$ecode >= 20)
# Find all the object classes for each column
column_classes <- sapply(df, class)
# Construct a blank row representative of the dataframe using the switch() function
blank_row <- as.data.frame(lapply(column_classes, function(class_type) {
switch(class_type,
"character" = "",
"numeric" = NA_real_,
"integer" = NA_integer_,
"logical" = NA,
"factor" = factor(levels = character(0)))
}), stringsAsFactors = FALSE)
# loop over rows inserting a blank row after every ith row
for (i in rows){
df <- add_row(df, blank_row, .after = i + 1)
}
我同意@MrFlick 的观点,添加空白行很奇怪。从您在问题中提出的内容来看,您似乎想通过明确指出错误代码 20 来使数据框更具可读性<= ecode < 30 are codes that represent stimuli with no response in a reasonable amount of time.
话虽如此,我建议创建一个新列来保存这些数据。