我是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中似乎并非如此。
任何帮助都是有用的。另外,如果有人可以推荐一本好书,让我学习如何进行此类操作,那也将是惊人的。
答案 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.html和https://r4ds.had.co.nz/iteration.html,了解有关操纵数据集和迭代的信息。