【问题标题】:How can I change column names of data.frames within a list with vector of same length in R?如何在 R 中具有相同长度的向量的列表中更改 data.frames 的列名?
【发布时间】:2017-08-26 04:09:56
【问题描述】:

我有一个长度为“x”的列表,我想使用与该列表相同长度的字符向量来更改该列表中所有 data.frames 的列名,如下所述:

a <- data.frame(rep(1:10), letters[1:10])
b <- data.frame(rep(11:20), letters[11:20])
l <- list(a,b)
nm <- c("letters1:10","letters11:20")

我想要类似的东西:

colnames(l[[1]]); colnames(l[[2]])

这给了我

[1] "rep.1.10."     "letters.1.10."
[1] "rep.11.20."     "letters.11.20."

我试过lapply(l, function(x) colnames(x)[2]&lt;-nm) 但它只返回了一个带有 nm 的列表,我想要一个包含原始 data.frames 和更新的 colnames 的列表。

谢谢。

【问题讨论】:

    标签: r list dataframe lapply


    【解决方案1】:

    笨拙,但它似乎有效(如果我理解了这个问题)。

    lapply(as.list(1:2), function(x){colnames(l[[x]])[2] <- nm[x];l[[x]]})
    

    【讨论】:

    • 谢谢!它真的帮助了我。
    【解决方案2】:
      Map( function(x,y){colnames(x)[2] <-y;x},l,nm)
     [[1]]
        rep.1.10. letters1:10
     1          1           a
     2          2           b
     3          3           c
     4          4           d
     5          5           e
     6          6           f
     7          7           g
     8          8           h
     9          9           i
     10        10           j
    
     [[2]]
        rep.11.20. letters11:20
     1          11            k
     2          12            l
     3          13            m
     4          14            n
     5          15            o
     6          16            p
     7          17            q
     8          18            r
     9          19            s
     10         20            t
    

    【讨论】:

    • 谢谢!但是我只想更改第二列名称。
    • lapply(l,function(x) {colnames(x)[2]=nm[1];x})
    • 这只是将两个数据框的第二列名称更改为相同的名称(即letters11:20)。而第一个数据框的第二列应该是letters1:10
    • 再试一次。抱歉,我使用 2 而不是 1。希望对您有所帮助。谢谢
    • 不,这也不起作用。这将第二列再次命名为相同的东西。
    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    相关资源
    最近更新 更多