【问题标题】:How to change column to row names in a list of data frames如何在数据框列表中将列名称更改为行名称
【发布时间】:2021-02-15 07:17:31
【问题描述】:

我有一个数据框列表,我想将一列更改为行名,因为我需要转置每个数据框。

使用一些虚拟数据,这是我正在使用的代码:

x <- c("A", "B", "C", "D", "E")
y <- c(1:5)
z <- c(6:10)

df1 <- data.frame("Row One"=x, "Row Two"=y)
df2 <- data.frame("Row One"=x, "Row Two"=z)
dfList <- list(df1,df2)

我用 lapply 试过了,没有运气。

dfList <- lapply(dfList, column_to_rownames("Row One"))

也不适用于 for 循环。

for(i in length(dfList)){
  dfList[i] <- column_to_rownames(dfList[i], "Row One") 
}

根据错误信息,我尝试将 as.data.frame 添加到列表元素中,但也没有用。

for(i in length(dfList)){
      dfList[i] <- column_to_rownames(as.data.frame(dfList[i], "Row One")) 
    }

关于最后一个的奇怪之处在于错误提示“在.data 中找不到列Row One。”

【问题讨论】:

    标签: r list dataframe loops lapply


    【解决方案1】:

    实际上,您使用lapply() 的方法是正确的。您犯的唯一错误是在列名中使用了空格。这样,R 在内部会在您看到空间的地方放置一个点!

    引用您的示例,如果您检查 df1 的列名,您会看到

    > colnames(df1)
    [1] "Row.One" "Row.Two"
    

    这是您的lapply() 命令没有成功的原因之一。另一个错误是您没有在column_to_rownames() 命令中指定数据,即lapply(dfList, column_to_rownames("Row One")) 错误但lapply(dfList, function(x) column_to_rownames(x, var = "Row One")) 正确。

    通过这些更正,有效的代码是

    dfList <- lapply(dfList, function(x) column_to_rownames(x, var = "Row.One"))
    

    但是请注意,现在您获得了data.frames

    > dfList
    [[1]]
      Row.Two
    A       1
    B       2
    C       3
    D       4
    E       5
    
    [[2]]
      Row.Two
    A       6
    B       7
    C       8
    D       9
    E      10
    

    也就是说,您消除了第一列并将其分配为行名。如果您想保留第一列设置行名,您可以这样做

    dfList2 <- lapply(dfList, function(x){rownames(x) <- x[,1]; x})
    

    输出

    > dfList2
    [[1]]
      Row.One Row.Two
    A       A       1
    B       B       2
    C       C       3
    D       D       4
    E       E       5
    
    [[2]]
      Row.One Row.Two
    A       A       6
    B       B       7
    C       C       8
    D       D       9
    E       E      10
    

    【讨论】:

      猜你喜欢
      • 2021-03-29
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 2018-01-12
      • 1970-01-01
      相关资源
      最近更新 更多