R 使用列索引重塑数据帧列表的形状

R 使用列索引重塑数据帧列表的形状,r,reshape,R,Reshape,我有一个多个数据帧的列表,每个数据帧有3列,我想对它们进行重塑。每个数据帧都有不同的列名称(我尝试更改所有df的列名称,但没有成功,但这是另一个SO问题:),因此我必须为列编制索引,而不是使用列名 我可以使用lapply获得我想要的: df = lapply(df, function(x) reshape(x, v.names = 1, idvar = 3, timevar = 2, direction ="wide")) 其中1、2和3是我想要使用的df列。但是出于好奇,我尝试使用for循环

我有一个多个数据帧的列表,每个数据帧有3列,我想对它们进行重塑。每个数据帧都有不同的列名称(我尝试更改所有df的列名称,但没有成功,但这是另一个SO问题:),因此我必须为列编制索引,而不是使用列名

我可以使用lapply获得我想要的:

df = lapply(df, function(x) reshape(x, v.names = 1, idvar = 3, timevar = 2, direction ="wide"))
其中1、2和3是我想要使用的df列。但是出于好奇,我尝试使用for循环来做同样的事情,但是我无法正确地完成它

for (i in length(df)){
df[[i]] <- reshape(df[[i]], v.names = 1, idvar = 3, timevar = 2, direction = "wide")
}
for(i长度(df)){

df[[i]]问题出在代码中

for (i in length(df))
对于列表的最后一个成员i,这将只传递一次。只需尝试将
length(df)
放入控制台-它只输出一个数字。您需要数字1、2、…、length(df)的向量,因此您需要
1:length(df)


另一个选项(如@*boat所述)是
seq_-along(df)
。这更安全-如果未定义
df
,它将生成空向量,与上述方法不同。但我更喜欢上面的符号,这只是上下文和个人偏好的问题。

我将尝试解决这两个问题(重塑和更改df列表的名称)

数据(Indometh)
名称(吲哚美辛)
##[1]“受试者”“时间”“浓度”
###创建df的列表

dflist或
for(i in seq_-along(df))
哪个更安全,因为您提供的选项在长度为0的情况下会失败。谢谢,我忘了这一点-这是上面的一个更安全的变体。对,这很有意义。谢谢你们。
for (i in length(df))
for (i in 1:length(df))
data(Indometh)
names(Indometh)
## [1] "Subject" "time"    "conc"

### create a list of df
dflist <- lapply(1:3, function(x) Indometh)

### changing the name of df
dflist <- lapply(dflist, setNames,
                 c("subject", "timevar", "conc"))

### Reshaping the data using colnames
dflist <- lapply(dflist, function(df)
                 reshape(df,
                         v.names = "conc",
                         idvar = "subject",
                         timevar = "timevar",
                         direction = "wide")
                 )

str(dflist, max.level = 1)
## List of 3
##  $ :Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and 'data.frame':   6 obs. of  12 variables:
##   ..- attr(*, "reshapeWide")=List of 5
##  $ :Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and 'data.frame':   6 obs. of  12 variables:
##   ..- attr(*, "reshapeWide")=List of 5
##  $ :Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and 'data.frame':   6 obs. of  12 variables:
##   ..- attr(*, "reshapeWide")=List of 5