1

我已经为此工作了一段时间,但我似乎无法弄清楚。我正在寻找一种解决方案,可以:计算 col1 和 col2 之间的差异并基于此创建 colA;然后计算 col2 和 col3 之间的差异并基于此创建 colB 等等。我有大约 70 行和 42 个这些列,所以这不是我想要手动做的事情(此时我几乎绝望了)。

还要说明一下,行中的某些单元格是空的(NA)。紧急解决方案是用零填充这些,但我宁愿不这样做。

此外,我使用的数据框是一个 tibble,但是,我并不受此约束,以至于我无法将其更改为真正的数据框。

我的数据如下所示: testdata

如您所见,这些列的名称很长,我也不知道如何更改:)。我通常使用列号,即 77:119。我希望这已经足够完整了。对不起,新手和可能不清楚的解释,这是我在这里的第一个问题,我在 R 中没有那么狡猾!

最后,为了创建 'user/intermittent_answers/n_length' 列,我使用了以下循环,因此我认为可以将其重用于我现在需要的计算。

#loop through PARTS of testdata to create _length's
for(i in names(testdata[34:76]))
  testdata[[paste(i, 'length', sep="_")]] <- str_length(testdata[[i]])

然后我尝试了类似的东西,我在这里找到了:FOR loop to calculate Difference on dates in R

for (j in 2:length(testdata$`user/intermittant_answers/42_length`))
+ testdata$lag[j] <- as.numeric(difftime(testdata$`user/intermittant_answers/42_length`[j], testdata$`user/intermittant_answers/42_length`[j-1], units=c("difference")), units = "days")
Error in as.POSIXct.numeric(time1) : 'origin' must be supplied

我认为这是因为我没有使用任何与时间相关的东西,但我不知道/不知道如何找到另一个不绑定到矩阵的“差异”相关函数,比如 matrixStats 包中的那个。

我希望有人能把我推向正确的方向!

谢谢!!

编辑:@Ben,感谢您的回复!如果我知道这个功能,我会更快地使用它:')。我试图在 df 中保留 NA 值的表示。此外,有些人建议使用双循环,但是,我还没有设法解决这个问题。我希望这有帮助!

> dput(testdata[1:10, 95:105])
structure(list(`user/intermittant_answers/18_length` = c(NA, 
24L, 34L, 33L, NA, NA, 16L, NA, 25L, 28L), `user/intermittant_answers/19_length` = c(NA, 
38L, 68L, 34L, NA, 11L, 20L, 12L, 47L, 52L), `user/intermittant_answers/20_length` = c(NA, 
59L, 81L, 42L, 2L, 33L, 20L, 26L, 96L, 78L), `user/intermittant_answers/21_length` = c(6L, 
90L, 116L, 42L, 14L, 41L, 20L, NA, 127L, 113L), `user/intermittant_answers/22_length` = c(17L, 
115L, 131L, 65L, 20L, 70L, 37L, 11L, 170L, 130L), `user/intermittant_answers/23_length` = c(40L, 
138L, 188L, 65L, 38L, 113L, 22L, 24L, 200L, 136L), `user/intermittant_answers/24_length` = c(66L, 
155L, 210L, 99L, 49L, 133L, 41L, 49L, 242L, 185L), `user/intermittant_answers/25_length` = c(66L, 
158L, 233L, 99L, 65L, 156L, 67L, 70L, 296L, 224L), `user/intermittant_answers/26_length` = c(84L, 
201L, 250L, 113L, 84L, 164L, 67L, 78L, 334L, 224L), `user/intermittant_answers/27_length` = c(89L, 
237L, 285L, 130L, 97L, 167L, 84L, 86L, 412L, 232L), `user/intermittant_answers/28_length` = c(116L, 
284L, 315L, 130L, 97L, 184L, 97L, 108L, 445L, 247L)), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

4

0 回答 0