创建一个函数来绑定R中的行

时间:2020-06-21 18:51:47

标签: r function bind

我在R中创建了一个函数来获取数据帧的某些列,因为它们是示例而不是变量:

df <-函数(x){ ex <-数据%>%select(1,date = 1 + x,value = 301 + x,602) (例如) }

想法是将它们全部与这样的东西合并

数据<-bind_rows( df(1:20))

所以我将绑定从x = 1到x = 20的所有行。 但是看起来我做不到,而我必须做这样的事情:

数据<-bind_rows( df(1),df(2),df(3).....)

我可能还需要其他功能,但是我不确定如何解决此问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您正在使这一过程变得比它需要的复杂。假设我的数据如下:

data <- iris[11:15, ]
data
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 11          5.4         3.7          1.5         0.2  setosa
#> 12          4.8         3.4          1.6         0.2  setosa
#> 13          4.8         3.0          1.4         0.1  setosa
#> 14          4.3         3.0          1.1         0.1  setosa
#> 15          5.8         4.0          1.2         0.2  setosa

现在假设我想将第2、3和4列用作观察值而不是变量。然后我可以选择像这样的列:

data[2:4]
#>    Sepal.Width Petal.Length Petal.Width
#> 11         3.7          1.5         0.2
#> 12         3.4          1.6         0.2
#> 13         3.0          1.4         0.1
#> 14         3.0          1.1         0.1
#> 15         4.0          1.2         0.2

要转置它们,我可以只使用t()并将结果矩阵转换为数据帧。

as.data.frame(t(data[2:4]))
#>               11  12  13  14  15
#> Sepal.Width  3.7 3.4 3.0 3.0 4.0
#> Petal.Length 1.5 1.6 1.4 1.1 1.2
#> Petal.Width  0.2 0.2 0.1 0.1 0.2

为完整起见,我可以将行名和列名设置为所需的任何名称:

setNames(as.data.frame(t(data[2:4]), row.names = 1:3), paste0("var", 1:5))
#>   var1 var2 var3 var4 var5
#> 1  3.7  3.4  3.0  3.0  4.0
#> 2  1.5  1.6  1.4  1.1  1.2
#> 3  0.2  0.2  0.1  0.1  0.2

因此,在您的情况下,该函数可能看起来像这样:

df <- function(x) {
  as.data.frame(t(data[x]), row.names = seq_along(x)) %>%
  setNames(paste0("var", seq(nrow(data))))
}

只需执行df(1:20),您将获得一个不错的数据框架 }

reprex package(v0.3.0)于2020-06-21创建