我试图使一些代码自动化,处理几个数据帧,这些数据帧稍后将变成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循环的情况下手动分配行名,那么它将起作用。有什么想法吗?
答案 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)