根据变量在新数据框中设置列名

时间:2015-07-23 03:56:02

标签: r

我的目标是能够根据传递的变量将列名分配给我创建的数据框。例如:

i='column1'

data.frame(i=1)
  i
1 1

列名称上方是' i'当我希望它是' column1'。我知道以下的作品,但并不像我喜欢的那样有效:

i='column1'
df<-data.frame(x=1)
setnames(df,i)
  column1
1       1

5 个答案:

答案 0 :(得分:2)

了解基地R如何以这种方式运作是很好的:

i  <- 'cloumn1'
df <- `names<-`(data.frame(1), i)
df
#  cloumn1
#1       1

答案 1 :(得分:2)

除了其他用户发布的答案之外,我认为您可能会遇到已经提出的解决方案。如果您已有一个包含预期行数的数据框,则可以使用括号添加新列:

df <- data.frame('column1'=1)
i <- 'column2'
df[[i]] <- 2
df
column1 column2
1       2

答案 2 :(得分:1)

如果想要摆脱setNames,你可能永远不会这样做,但

i <- 'column1'
data.frame(`attr<-`(list(1), "names", i))
#   column1
# 1       1

您可以在data.frame中看到它有代码

x <- list(...)
vnames <- names(x)

所以,你可以搞乱name属性。

答案 3 :(得分:0)

不完全确定您希望它如何更高效,但您可以在数据框与colnames汇总后立即添加所有列名称。这是一个基于你的例子。

data.frame(Td) a b 1 1 4 2 1 5

nam<-c("Test1","Test2") colnames(Td)<-nam

data.frame(Td) Test1 Test2 1 1 4 2 1 5

答案 4 :(得分:0)

您可以简单地将列变量的名称及其值作为参数传递给数据框,而无需添加更多行:

    String fname;
    String lname;
    for (int i = 0; i < NAMES.length; i++) {
        lname = NAMES[i][0];
        for (int j = i + 1; j < NAMES.length; j++) {
            if (NAMES[j][1] < lname) {  // showing compilation error :(

            }
        }
    }