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对象,你需要将数据作为因子保存。我在回答中编辑了代码以接受任意字符串。您能简要解释一下为什么“您需要将数据保留为因素”吗?谢谢你的耐心,我是新手。事实上,你不是!我已经编辑了我的响应--您可以将值存储为字符。我每天都学到新东西!