我的数据框(DF)如下所示:
a e 1 4
d f 2 5
c g 3 6
我需要在DF的第一行插入一个向量c(“g”,“H”,7,8),使它看起来像这样
g H 7 8
a e 1 4
d f 2 5
c g 3 6
但是当我使用这个命令行`InsertRow(DF,vector,RowNum = 1)'时,它会返回一条警告信息,DF的第一行就像这样结束了
警告讯息:
1:在[<-.factor
(*tmp*
,iseq,value =“g”):
无效因子水平,NA生成
2:在[<-.factor
(*tmp*
,iseq,value =“H”)中:
无效因素水平,NA生成`
<NA> <NA> 7 8
有谁能告诉我如何解决这个问题?提前谢谢。
答案 0 :(得分:1)
假设初始数据集(&#39; DF&#39;)有一些因素&#39;列中的列。在rbind
向量(&#39; v&#39;)之前,更改&#39;因素&#39;列到&#39;字符&#39;。为此,创建因子列的逻辑索引(&#39; indx&#39;),遍历factor
列并转换为字符(lapply(DF[indx],..)
)。 rbind
带有数据集的向量,并使用type.convert
转换列类。
indx <- sapply(DF, is.factor)
DF[indx] <- lapply(DF[indx], as.character)
DF1 <- rbind(v, DF)
DF1[] <- lapply(DF1, type.convert)
DF1
# V1 V2 V3 V4
#1 g H 7 8
#2 a e 1 4
#3 d f 2 5
#4 c g 3 6
str(DF1)
#'data.frame': 4 obs. of 4 variables:
# $ V1: Factor w/ 4 levels "a","c","d","g": 4 1 3 2
# $ V2: Factor w/ 4 levels "e","f","g","H": 4 1 2 3
# $ V3: int 7 1 2 3
# $ V4: int 8 4 5 6
DF <- structure(list(V1 = structure(c(1L, 3L, 2L), .Label = c("a",
"c", "d"), class = "factor"), V2 = structure(1:3, .Label = c("e",
"f", "g"), class = "factor"), V3 = 1:3, V4 = 4:6), .Names = c("V1",
"V2", "V3", "V4"), class = "data.frame", row.names = c(NA, -3L))
v <- c('g', 'H', 7, 8)