【问题标题】:Using variable value as column name in data.frame or cbind在 data.frame 或 cbind 中使用变量值作为列名
【发布时间】:2013-03-20 14:02:32
【问题描述】:

在创建数据框时(或在类似情况下,如使用 cbind),R 中有没有办法将变量评估为列名?

例如

a <- "mycol";
d <- data.frame(a=1:10)

这会创建一个数据框,其中有一列名为 a 而不是 mycol

这不如帮助我从代码中删除很多行的情况重要:

a <- "mycol";
d <- cbind(some.dataframe, a=some.sequence)

我当前的代码已经被折磨了:

names(d)[dim(d)[2]] <- a;

这在美学上很漂亮。

【问题讨论】:

  • 你不能做colnames(d)[2] &lt;- a 甚至names(d)[2] &lt;- a 但我发现明确的前者更安全。

标签: r dataframe renaming columnname


【解决方案1】:
> d <- setNames( data.frame(a=1:10), a)
> d
   mycol
1      1
2      2
3      3
4      4
5      5
6      6
7      7
8      8
9      9
10    10

【讨论】:

    【解决方案2】:

    structure(data.frame(1:10),names="mycol") 在美学上让您满意吗? :-)

    【讨论】:

    • 我是支持者之一,但我很想知道您和我的答案是否相同,并看到他们使用 dputidentical 作为测试。
    【解决方案3】:

    只在创建后使用 colnames。 例如

    a <- "mycolA"
    b<- "mycolB"
    d <- data.frame(a=1:10, b=rnorm(1:10))
    colnames(d)<-c(a,b)
    d
    mycolA     mycolB
     1 -1.5873866
     2 -0.4195322
     3 -0.9511075
     4  0.2259858
     5 -0.6619433
     6  3.4669774
     7  0.4087541
     8 -0.3891437
     9 -1.6163175
     10  0.7642909
    

    【讨论】:

      【解决方案4】:

      简单的解决方案:

      df <- data.frame(1:5, letters[1:5])
      logics <- c(T,T,F,F,T)
      cities <- c("Warsaw","London","Paris","NY","Tokio")
      m <- as.matrix(logics)
      m2 <- as.matrix(cities)
      name <- "MyCities"
      colnames(m) <- deparse(substitute(logics))
      colnames(m2) <- eval(name)
      df<-cbind(df,m)
      cbind(df,m2)
      
      X1.5 letters.1.5. logics MyCities
      1            a   TRUE   Warsaw
      2            b   TRUE   London
      3            c  FALSE    Paris
      4            d  FALSE       NY
      5            e   TRUE    Tokio
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        相关资源
        最近更新 更多