循环遍历R中的数据框以更改列名和行名

时间:2019-06-29 20:39:09

标签: r dataframe

我试图使一些代码自动化,处理几个数据帧,这些数据帧稍后将变成LaTeX表。我想循环遍历六个数据框,从中删除相同的列,然后将所有列和行重命名为相同的标准名称。

我尝试创建一个基本的for循环,但是它对数据帧没有任何作用(也没有给出错误)。

row1 <- c(.5,.25,.75)
row2 <- c(.5,.25,.75)
df_1 <- data.frame(rbind(row1,row2))
row3 <- c(.5,.25,.75)
row4 <- c(.5,.25,.75)
df_2 <- data.frame(rbind(row3,row4))
tables <- list(df_1,df_2)
for (i in tables){ 
  rownames(i) <- c("row one","row two")
  colnames(i) <- c("col one","col two","col three")
}
print(df_1)

它正在打印df1,而没有我要在循环中分配的行或列名称。如果我在没有for循环的情况下手动分配行名,那么它将起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试

for (i in seq_along(tables)){ 
  rownames(tables[[i]]) <- c("row one","row two")
  colnames(tables[[i]]) <- c("col one","col two","col three")
  }
print(tables)
#[[1]]
#        col one col two col three
#row one     0.5    0.25      0.75
#row two     0.5    0.25      0.75

#[[2]]
#        col one col two col three
#row one     0.5    0.25      0.75
#row two     0.5    0.25      0.75

答案 1 :(得分:1)

或者,您可以使用lapply来加快过程并保持列表结构。

tables <- lapply(list(df_1, df_2), function (df) {
    rownames(df) <- c("row one","row two")
    colnames(df) <- c("col one","col two","col three")
    return (df)
}

# [[1]]
#         col one col two col three
# row one     0.5    0.25      0.75
# row two     0.5    0.25      0.75
#
# [[2]]
#         col one col two col three
# row one     0.5    0.25      0.75
# row two     0.5    0.25      0.75

tables <- lapply(tables, 'dimnames<-', list(c("row one","row two"),c("col one","col two","col three"))),它更简洁(贷记到@markus)