1

我在 R(数据)中有一个大型数据框,由 23 个 .gazedata 文件(每个主题一个)组成:

filenames <- list.files("~/Desktop/DUT Analyses 2019", pattern = "*.gazedata", full.names = TRUE)
ldf <- lapply(filenames, read_tsv)
data <- do.call("rbind", ldf)

创建因子和时间变量后,我根据眼动仪收集的默认有效性参数创建瞳孔变量:

data$DiameterPupilLeftEye[data$ValidityLeftEye != 0] <- NA
data$DiameterPupilRightEye[data$ValidityRightEye != 0] <- NA
data$pupil = rowMeans(select(data, DiameterPupilLeftEye, DiameterPupilRightEye), na.rm = TRUE)

现在,我需要创建一个插值瞳孔变量 (pupil_inter) 来将值插值到最大间隙 4:

data$pupil_inter<- na.approx(data$pupil, rule = 2, maxgap = 4)

但是,会出现以下错误:

Error in `$<-.data.frame`(`*tmp*`, pupil_inter, value = c(4.2120165, 4.20966425,  : 


replacement has 1810947 rows, data has 1810956

这些行金额每次都完全相同。

至关重要的是,如果我从预处理中排除主题 22 和 23 .gazedata 文件,后一个代码可以工作并且没有错误

我已尝试确定现有的“替换有 [x] 行,数据有 [y]”问题以帮助解决我的具体问题,但找不到相关的解决方案。所有 .gazedata 文件都是使用相同的硬件和软件收集的。

即使首先使用以下代码成功地创建了一个 null 瞳孔间变量,该错误仍然存​​在:

data$pupil_inter <- NA

提前感谢您提供的任何建议。

4

1 回答 1

1

发生错误是因为该na.approx()函数返回的行数少于您传入的行数,因此您尝试将具有 1,810,947 行的列附加到具有 1,810,956 行的数据帧中。查看文档na.approx(),我看到有一个na.rm参数。当这是真的(默认情况下)时,它将NAs从返回的值中删除,并且您将拥有比开始时更少的行。如果将其设置为 false,NAs则会返回 并且您应该具有相同的行数。试试这个:

data$pupil_inter<- na.approx(data$pupil, rule = 2, maxgap = 4, na.rm = FALSE)
于 2019-03-14T02:58:02.647 回答