我在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).....)
我可能还需要其他功能,但是我不确定如何解决此问题。
谢谢!
答案 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创建