我正在使用以下代码将数据读入两个数据框:
IdaEmpA <- data.frame(table(unlist(DadosA$idade)))
IdaEmpB <- data.frame(table(unlist(DadosB$idade)))
然后我想在这些数据帧中添加一个具有NAs数量的行。我试过这样:
IdaEmpA = rbind(IdaEmpA,c(7,sum(is.na(DadosA$idade))))
IdaEmpB = rbind(IdaEmpB,c(7,sum(is.na(DadosB$idade))))
结果数据是:
> IdaEmpA
RespA QuantA
1 1 11
2 2 13
3 3 15
4 4 3
5 5 18
6 6 1
> IdaEmpB
RespB QuantB
1 1 18
2 2 14
3 3 21
4 4 2
5 6 13
但是我收到警告,并且没有将值添加到第一列:
Warning message:
In `[<-.factor`(`*tmp*`, ri, value = 7) :
nível de fator inválido, NA gerado
Warning message:
In `[<-.factor`(`*tmp*`, ri, value = 7) :
nível de fator inválido, NA gerado
警告后的结果:
> IdaEmpA
RespA QuantA
1 1 11
2 2 13
3 3 15
4 4 3
5 5 18
6 6 1
7 <NA> 1
> IdaEmpB
RespB QuantB
1 1 18
2 2 14
3 3 21
4 4 2
5 6 13
6 <NA> 3
如何设置值7而不是NA ???
任何线索都可以帮助我,谢谢!
答案 0 :(得分:2)
当存在因子列时会发生这种情况。如果该列的新行中的值不在因子列的levels
中,您将收到此消息。例如,如果我将两列都作为&#34;数字&#34; ,这不会是一个错误。
rbind(IdaEmpA,c(7,5))
# RespA QuantA
#1 1 11
#2 2 13
#3 3 15
#4 4 3
#5 5 18
#6 6 1
#7 7 5
如果其中一列是factor
IdaEmpA$RespA <- factor(IdaEmpA$RespA)
rbind(IdaEmpA,c(7,5))
# RespA QuantA
#1 1 11
#2 2 13
#3 3 15
#4 4 3
#5 5 18
#6 6 1
#7 <NA> 5
#Warning message:
#In `[<-.factor`(`*tmp*`, ri, value = 7) :
# invalid factor level, NA generated
因为,&#34; IdaEmpA&#34;似乎属于&#34;数字&#34; class,我们可以在执行rbind
IdaEmpA$RespA <- with(IdaEmpA, as.numeric(levels(RespA))[RespA])
如果有多个列需要重新转换为numeric
indx <- sapply(IdaEmpA, is.factor)
IdaEmpA[indx] <- lapply(IdaEmpA[indx], function(x)
with(x, as.numeric(levels(x))[x]))
使用read.table/read.csv
读取数据集时可以避免这一切。您可以使用stringsAsFactors=FALSE
以便&#34;字符&#34; class不会转换为&#34; factor&#34;
更正rbind
步骤后,merge
会更容易。
IdaEmpA <- structure(list(RespA = 1:6, QuantA = c(11L, 13L, 15L, 3L, 18L,
1L)), .Names = c("RespA", "QuantA"), class = "data.frame", row.names =
c("1", "2", "3", "4", "5", "6"))