data <- data.frame(A= character(0), B= character(0))
data[1, ] <- c("AA", "BB")
Warning messages:
1: In `[<-.factor`(`*tmp*`, iseq, value = "AA") :
invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, iseq, value = "BB") :
invalid factor level, NA generated
> data
A B
1 NA NA
答案 0 :(得分:1)
尝试:
data <- data.frame(A= character(0), B= character(0), stringsAsFactors=FALSE)
data[1, ] <- c("AA", "BB")
在您的示例中,A
和B
是因素。
答案 1 :(得分:1)
我建议采用与其他答案不同的方法。如果A和B之类的名称或ID号都是唯一的,那么将它们视为字符串就可以了,其他答案也没问题。但是如果A和B是分类变量,你将变成因子(要么是你自己,要么是在传递给需要因子的函数时通过自动转换),那么预先创建因子并指定开始的等级是有好处的。
> mydata <- data.frame( A=factor(levels=c('A','AA','AAA')),
+ B=factor(levels=c('BB','CC','DD')) )
> mydata[1,] <- c('AA','BB')
> mydata[2,] <- c('A','bb')
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "bb") :
invalid factor level, NA generated
> mydata
A B
1 AA BB
2 A <NA>
>
请参阅,如果您将列设置为因子并设置有效级别,那么添加正确的行会执行正确的操作,但如果您在输入行时输入错误,则会收到有用的警告消息让你知道你做错了什么并预先修好,而不是等待在分析时被它蜇伤。这也允许您指定因子级别的顺序,而不是使用默认的字母顺序。
答案 2 :(得分:0)
假设您使用默认stringsAsFactors=TRUE
开始(以&#39; stringsAsFactors = FALSE&#39;开头更安全)
data <- data.frame(A= factor(character(0),levels=c("AA","AA2")), B= factor(character(0),levels=c("BB","BB2")))
data
#[1] A B
#<0 rows> (or 0-length row.names)
data[1,] <- c("AA","BB")
data
# A B
#1 AA BB
data[2:3,] <- c("AA","AA2","BB","BB2")
data
# A B
# 1 AA BB
# 2 AA BB
# 3 AA2 BB2