我有一个带有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
答案 0 :(得分:2)
试试这个:(未经测试,因为没有数据示例。)
icol <- which(colnames(df2) == "Weight")
df1[, "Desc."][is.na(df1[, "Desc."])] <- colnames(df2)[-icol]