通过列表RStudio在数据框列上执行操作

时间:2020-07-22 16:00:16

标签: r

我是RStudio的初学者,现在遇到了问题。我有一个名为sensor_data的数据集,其中包含传感器S12,S13,S14(作为列名)。我想记录以下值:S14-S13和S13-S12(仅以此方式),并将它们包括在我的数据框中。下面,我提到了下面一个简单的问题示例(该问题不起作用),以查看结果的样子。但这不起作用,因为[val -1]的行为不像索引。

我可以单独进行处理,然后将它们添加到数据框中,但这是一项昂贵的操作。想知道是否有更聪明的方法可以通过for循环来做到这一点。

P001<- list("S12","S13","S14")
for (val in P001){
  print(sensor_data[[val]] - sensor_data[[val - 1]])
}

我遵循Python编程的逻辑,我可以通过for循环对列表进行索引,但是在R中似乎并非如此。

任何帮助都是有用的。另外,如果有人可以推荐一本好书,让我学习如何进行此类操作,那也将是惊人的。

1 个答案:

答案 0 :(得分:0)

您可以使用base::transform函数或dplyr::mutate

使用mutate

library(dplyr)

sensor_data %>%
  mutate(difference1 = s14 - s13,
         difference2 = s13 - s12)

如果要在多个列上使用for循环,可以执行以下操作:

newdata <- sensor_data

for (i in 2:ncol(sensor_data)){
  newdata[ncol(sensor_data) + i - 1] <- sensor_data[i] - sensor_data[i - 1]
  colnames(newdata)[ncol(sensor_data) + i - 1] <- 
    paste0(colnames(sensor_data)[i], "-", colnames(sensor_data)[i - 1])
}

尽管那里可能有更容易阅读的方式。

签出:https://r4ds.had.co.nz/transform.htmlhttps://r4ds.had.co.nz/iteration.html,了解有关操纵数据集和迭代的信息。