R - 使用character()操作填充空data.frame

时间:2014-01-01 20:59:41

标签: r dataframe rbind

有一个表格的ID和句子的数据框元素列表:

修改-开始 代码需要在循环中工作 - 所以我确实要明确地首先创建一个空数据帧,然后填充它,然后删除内容,然后重新填充,.. 修改-END

# creating an empty dataframe
sent.df <- data.frame(ID=character(), Sentences=character()) 

# have IDs are like:
id1 <- "01xx"
id2 <- "02xx"
id3 <- "03xx"
id4 <- "04xx"

# have sentences are like:
sent1 <- "ab"
sent2 <- "bc"
sent3 <- "cd"
sent4 <- "de"

问题1)当我用

填充数据框时
sent.df <- rbind(sent.df, c(id1, sent1))
sent.df <- rbind(sent.df, c(id2, sent2)) #*
sent.df <- rbind(sent.df, c(id3, sent3))
sent.df <- rbind(sent.df, c(id4, sent4))

#I get this unexplicable errors, after the second command marked with "#*"

s:
1: In `[<-.factor`(`*tmp*`, ri, value = "03xx") :
  invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, ri, value = "cd") :
  invalid factor level, NA generated

问题2)执行第一个数据帧行

后,不会保留列名
> sent.df
  X.02xx. X.bc.
1    02xx    bc

观察:以下代码有效 - 尽管它似乎与评论

不一致
sent.df <- data.frame(ID=numeric(), Sentences=numeric()) # inconsistent class initialization

sent.df[1,] <- c("01xx", "ab")           # rbind doesn't work. see above.
sent.df <- rbind(sent.df, c(id2, sent2))
sent.df <- rbind(sent.df, c(id3, sent3))
sent.df <- rbind(sent.df, c(id4, sent4))

所需的输出

> sent.df
    ID Sentences
1 01xx   ab
2 02xx   bc
3 03xx   cd
4 04xx   de

3 个答案:

答案 0 :(得分:2)

sent.df <- data.frame(ID=id1, Sentences=sent1, stringsAsFactors=FALSE)
sent.df <- rbind(sent.df, c(id2, sent2))
sent.df <- rbind(sent.df, c(id3, sent3))
sent.df <- rbind(sent.df, c(id4, sent4))
sent.df
#     ID Sentences
# 1 01xx        ab
# 2 02xx        bc
# 3 03xx        cd
# 4 04xx        de

答案 1 :(得分:1)

也许你可以做到

sent.df <- data.frame( 
   id=c("01xx", "02xx", "03xx", "04xx"),
   sentences=c("ab", "bc", "cd", "de")
)

如果你需要迭代工作,这将起作用

sent.df <- data.frame()
adding <- TRUE
while(adding) {
  current_id <- "next_id"
  current_sent <- "next_sent"
  sent.df <- rbind(sent.df, data.frame(id=current_id, sentences=current_sent))
  adding <- FALSE
}

但这确实很慢,应该避免。

答案 2 :(得分:1)

如果您想轻松地执行此操作,请在操作之前通过设置此选项来避免绑定factor

options(stringsAsFactors = FALSE)