R:将字符向量添加到data.frame行

 2021-01-14 

R: add character vector to data.frame row

我有一个数据帧(DF),如下所示:

1
2
3
a   e   1   4
d   f   2   5
c   g   3   6

我需要在DF的第一行插入一个向量c(" g," H",7,8),以便它看起来像这样

1
2
3
4
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生成了

1
<NA> <NA>   7   8

有人可以告诉我如何解决此问题吗?预先感谢。


假设初始数据集('DF')具有一些"因素"列,如帖子中所示。在rbind向量('v')之前,将'factor'列更改为'character'。为此,创建因子列的逻辑索引('indx'),在factor列中循环并转换为字符(lapply(DF[indx],..))。 rbind具有数据集的向量,并使用type.convert转换列类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

数据

1
2
3
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)