我的目标是能够根据传递的变量将列名分配给我创建的数据框。例如:
i='column1'
data.frame(i=1)
i
1 1
列名称上方是' i'当我希望它是' column1'。我知道以下的作品,但并不像我喜欢的那样有效:
i='column1'
df<-data.frame(x=1)
setnames(df,i)
column1
1 1
答案 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 :(
}
}
}