R:在调用rbind()时控制自动创建的列名

R:在调用rbind()时控制自动创建的列名,r,R,如果我这样做: > df <- data.frame() > rbind(df, c("A","B","C")) X.A. X.B. X.C. 1 A B C df2 = as.data.frame(df, stringsAsFactors=T) df rbind(df,c(“A”、“B”、“c”)) X.A.X.B.X.C。 1 A B C 您可以看到该行被添加到空数据框中。但是,列会根据数据的内容自动命名 如果我以后想: > df <

如果我这样做:

> df <- data.frame()
> rbind(df, c("A","B","C"))
  X.A. X.B. X.C.
1    A    B    C
df2 = as.data.frame(df, stringsAsFactors=T)
df rbind(df,c(“A”、“B”、“c”)) X.A.X.B.X.C。 1 A B C 您可以看到该行被添加到空数据框中。但是,列会根据数据的内容自动命名

如果我以后想:

> df <- rbind(df, c("P", "D", "Q"))
>df将选项“stringsAsFactors”设置为False,该选项将值存储为字符:

df=data.frame(first = 'A', second = 'B', third = 'C', stringsAsFactors=FALSE)
rbind(df,c('Horse','Dog','Cat'))
  first second third
1     A      B     C
2 Horse    Dog   Cat

sapply(df2,class)
      first      second       third 
"character" "character" "character" 
稍后,如果要使用因子,可以按如下方式进行转换:

> df <- data.frame()
> rbind(df, c("A","B","C"))
  X.A. X.B. X.C.
1    A    B    C
df2 = as.data.frame(df, stringsAsFactors=T)

@baha kev对字符串和因子有很好的回答

我只想指出data.frame的
rbind
的奇怪行为:

# This is "should work", but it doesn't:
# Create an empty data.frame with the correct names and types
df <- data.frame(A=numeric(), B=character(), C=character(), stringsAsFactors=FALSE)
rbind(df, list(42, 'foo', 'bar')) # Messes up names!
rbind(df, list(A=42, B='foo', C='bar')) # OK...

# If you have at least one row, names are kept...
df <- data.frame(A=0, B="", C="", stringsAsFactors=FALSE)
rbind(df, list(42, 'foo', 'bar')) # Names work now...
#这是“应该行得通”,但它没有:
#使用正确的名称和类型创建空data.frame

df为什么不能在运行下一个rbind之前重命名列
colnames(df)这可能与这些字符串到因子的隐式转换有关,请参阅下面的@baha-kev的答案。回答下面的问题<代码>选项(stringsAsFactors=FALSE)
将修复对系数的转换。而且,不,在执行此操作时,没有“需要”使用因子
rbind
。设置了
stringsAsFactors
选项后,当前的
rbind
步骤应该可以正常工作。然而,有人可能会提出一种不同的方法来构造
data.frame
。如果我暗示我所有的数据都是字母,我很抱歉。它们不是,而是任意字符串。这确实有帮助。我想另一种剥猫皮的方法是防止它们变成因子,可以吗?我想如果你想使用data.frame对象,你需要将数据作为因子保存。我在回答中编辑了代码以接受任意字符串。您能简要解释一下为什么“您需要将数据保留为因素”吗?谢谢你的耐心,我是新手。事实上,你不是!我已经编辑了我的响应--您可以将值存储为字符。我每天都学到新东西!