有一个表格的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
答案 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)