【问题标题】:R: add character vector to data.frame rowR:将字符向量添加到 data.frame 行
【发布时间】:2015-05-16 03:04:59
【问题描述】:

我有一个如下所示的数据框 (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

谁能告诉我如何解决这个问题?提前致谢。

【问题讨论】:

  • 将因子列转换为字符并尝试rbind(data.frame(V1='g', V2='H', V3=7, V4=8), DF) if `V1, V2, .是列名
  • 谢谢。只是好奇,如果我有一个长向量和一个包含许多列的 data.frame 怎么办。有没有办法在不输入“V1 = ...”的情况下绑定它们。谢谢。
  • 如果你有一个混合类的数据集,如示例所示,向量的问题是它只能保存一种类型,所以,当你 rbind 时,输出数据帧将是所有字符列.

标签: r vector


【解决方案1】:

假设初始数据集(“DF”)有一些“因子”列,如帖子中所示。在rbind 向量('v') 之前,将'factor' 列更改为'character'。为此,创建因子列的逻辑索引 ('indx'),遍历 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 2015-07-25
    • 2015-02-12
    • 1970-01-01
    相关资源
    最近更新 更多