在一个dataframe中,我有一组列,我想为它们创建一组新的列。具体来说,从第4列到第8列和第11列到第13列,我希望创建新列,这些列是这些列的滞后版本。
在不应用for循环的情况下,对于每个单独的列,我的滞后代码看起来像这样:df$FIREmob_l1 <- lag(df$FIREmob, 50L)
但是,我想应用一个循环,以便通过将lag(df$"colname", 50L)
应用于第5至8列和第11至13列来创建新列“colname”_l1。
我的两个主要问题:
1.我如何在循环中指定我只希望循环在 Dataframe 中的特定列上运行?
1.我如何表示我希望为每个名为“'colname'_1L”的变量创建一个新变量?
谢谢!
我都不知道该从何开始。
2条答案
按热度按时间kknvjkwl1#
你没有提供一个工作示例,所以我不能测试它,但我认为这就是你想要的:
如果您想将滞后列添加到原始data.frame中,只需使用
cbind
即可。bwntbbo32#
dplyr
提供了一种非常简单的方法来完成此任务具体回答你的两个问题:
across
函数需要两个参数。(1)第一个是要应用函数的列名向量。在这里,我将它们指定为col4:col8
和col11:col13
,但是您需要用实际的列名来替换它们。(2)第二个是函数或函数列表。在这里,我们使用一个大小为1的列表来指定需要创建新变量而不是覆盖原始变量。默认情况下(我们在这里很幸运),它使用格式
"{.col}_{.fn}"
,其中.col
是列名,.fn
是函数名,所以通过命名函数l1
,您可以得到您想要的。如果你想做其他事情,你可以给across
添加另一个参数:.name
,在这里指定如何将列名和函数名包含到新变量名中(例如.name = "{.fn}_{.col}"
将给予相反的顺序)。如果您不熟悉管道操作符(
|>
),则等效的表示为