如果数据框中其他位置满足条件,则向 R 数据框添加空白行

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

在此文件: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
数据子集中的每行之后插入空白行。

这些都不起作用。我不太确定从这里该去哪里。如有任何帮助,我们将不胜感激!

r dataframe append data-manipulation data-management
1个回答
0
投票

回答你的问题:

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.

话虽如此,我建议创建一个新列来保存这些数据。

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