在 for 循环期间丢失行名称

Losing row names during for loop

我有以下代码:

supply = vector(length = 64, mode = 'list')
for (i in 1:64) {
  supply[[i]] = df3[rownames(df6),]*df6[,i]

names(supply) <- sheetnames

df3和df6都有行名,用来匹配上的64个新表。在这些新表中,行名消失了(列名仍然存在)。如何获取结果中的行名称?我需要将它们导出到 Excel,包括在 for 循环中匹配的行名称。

**编辑

我尝试了以下方法:

supply = vector(length = 64, mode = 'list')
for (i in 1:64) {
  supply[[i]] = df3[rownames(df6),]*df6[,i]
  row.names(supply[[i]]) = row.names(df6)}

但是没用

你可以试试这个。它应该 return 正是您要查找的内容,但 rownames 是一列除外。

# get initial columnnames
colnames3 <- names(df3)
colnames6 <- names(df6)

# set rownames as a column names "rowname"
df3 <- tibble::rownames_to_column(df3)
df6 <- tibble::rownames_to_column(df6)

# join by rowname
df3 <- dplyr::inner_join(df3, df6, by = "rowname")

# define the columns you need
out <- df3[c("rowname", colnames3)]

# your loop!
supply <- lapply(colnames6, function(col){

        out[colnames3] <- df3[colnames3] * df3[,col]
        out

})

没有可重现的例子很难对你有更多帮助。

lapply return是一个列表,所以你不需要在supply之前初始化,你也不需要for循环。