如何在将数据库中的字符串值添加到数据框时从该矢量中删除它

时间:2017-08-01 18:33:50

标签: r dataframe

我有一个带有NA值的数据帧(1)我想用另一个数据帧的(2)列名中的字符替换。我不希望输入其中一个列名。

此:

Symbol <- c("A1B1", "A2B2", "A3B3")
Desc. <- c("Barcode", NA, NA)
AABB <- c("xyz-00", "2016", "0001")
YYZZ <- c("xyz-01", "2016", "0002")
df1 <- data.frame(Symbol, Desc., AABB, YYZZ)

制作df1:

df1
    Symbol     Desc.      AABB     YYZZ
1   A1B1       Barcode    xyz-00   xyz-01
2   A2B2       NA         2016     2016
3   A3B3       NA         0001     0002

此:

Year <- c("2016", "2016")
ID <- c("001", "002")
Weight <- c(138, 170)
df2 <- data.frame(Year, ID, Weight)
rownames(df2) <- c("A1B1", "A2B2")

制作df2:

df2
       Year    ID    Weight
A1B1   2016    001   138
A2B2   2016    002   170    

在这个例子中,我想在替换NA时保持“重量”。使用的实际数据帧比这大得多,我想要豁免的值将在中间某处,所以我想通过输入来豁免列名。

我试过的是这个,虽然我知道这是用于数值:

df1[, "Desc."][is.na(df1[, "Desc."])] <- colnames(df2)[-"Weight"]

而且:

df1[, "Desc."][is.na(df1[, "Desc."])] <- colnames(df2)[!"Weight"]

这两个都会产生错误,说明这是一个非法的论点。

所需的输出将是df1变为

df1
    Symbol    Desc.      AABB      YYZZ
1   A1B1      Barcode    xyz-00    xyz-01
2   A2B2      Year       2016      2016
3   A3B3      ID         0001      0002

1 个答案:

答案 0 :(得分:2)

试试这个:(未经测试,因为没有数据示例。)

icol <- which(colnames(df2) == "Weight")
df1[, "Desc."][is.na(df1[, "Desc."])] <- colnames(df2)[-icol]