研究这个可敬的 R 烦恼带我来到了这个页面。我想对 Georg 的优秀答案(https://dev59.com/Am435IYBdhLWcg3wvy-_#41609844)进行更多的解释,它不仅解决了 OP 提出的问题(丢失字段名称),还可以防止所有字段不必要地转换为因子。 对于我来说,这两个问题是相互关联的。我需要一个基于 R 的解决方案,它不涉及编写额外的代码,但保留了两个不同的操作:定义数据框架,附加行 - 这就是 Georg 的答案提供的。
下面的前两个示例说明了问题,第三个和第四个示例显示了 Georg 的解决方案。
示例 1:使用 rbind 将新行附加为向量
my.df <- data.frame(
table = character(0),
score = numeric(0),
stringsAsFactors=FALSE
)
my.df <- rbind(
my.df,
c("Bob", 250)
)
my.df
X.Bob. X.250.
1 Bob 250
str(my.df)
'data.frame': 1 obs. of 2 variables:
$ X.Bob.: Factor w/ 1 level "Bob": 1
$ X.250.: Factor w/ 1 level "250": 1
示例2:将新行作为数据框附加在rbind内
my.df <- data.frame(
table = character(0),
score = numeric(0),
stringsAsFactors=FALSE
)
my.df <- rbind(
my.df,
data.frame(name="Bob", score=250)
)
my.df
name score
1 Bob 250
str(my.df)
'data.frame': 1 obs. of 2 variables:
$ name : Factor w/ 1 level "Bob": 1
$ score: num 250
示例3:将新行作为数据框附加在rbind内,使用stringsAsFactors=FALSE参数
my.df <- data.frame(
table = character(0),
score = numeric(0),
stringsAsFactors=FALSE
)
my.df <- rbind(
my.df,
data.frame(name="Bob", score=250, stringsAsFactors=FALSE)
)
my.df
name score
1 Bob 250
str(my.df)
'data.frame': 1 obs. of 2 variables:
$ name : chr "Bob"
$ score: num 250
例子4:与例子3类似,但一次添加多行。
my.df <- data.frame(
table = character(0),
score = numeric(0),
stringsAsFactors=FALSE
)
my.df <- rbind(
my.df,
data.frame(
name=c("Bob", "Carol", "Ted"),
score=c(250, 124, 95),
stringsAsFactors=FALSE)
)
str(my.df)
'data.frame': 3 obs. of 2 variables:
$ name : chr "Bob" "Carol" "Ted"
$ score: num 250 124 95
my.df
name score
1 Bob 250
2 Carol 124
3 Ted 95
字符
和数字
),最好使用list函数list("five",6)
。否则,它会将所有东西都解释为字符。 - Untitpoi