У меня есть df, как это:
id <- c("defoo","ghfoo","abfoo")
abc <- c(.3,.1,.4)
ghi <- c(.4,.2,.2)
abc_dif <- c(.4,.3,.8)
def_dif <- c(.5,.7,.6)
ghi_dif <- c(.2,.1,.9)
df <- data.frame(id,abc,ghi,abc_dif,def_dif,ghi_dif)
Я хочу найти столбцы, имена которых содержат первые два символа значения в строке идентификатора, а также включить «dif», и создать новый столбец, содержащий соответствующие значения в этих столбцах для каждой строки.
В этом примере данных новый столбец будет
df$result <- c(.5,.1,.8)
Мои многочисленные попытки включали различные версии sapply и apply, как, например, следующая попытка просто получить индекс столбца:
df$result <- apply(substr(df[,which(colnames(df)=="id")],1,2),1,function(x) grep(x,colnames(df[which(grepl("dif",colnames(df),fixed=TRUE))]),fixed = TRUE))
Это дает ошибку:
"Error in apply(substr(df[, which(colnames(df) == "id")], 1, 2), 1, function(x) grep(x, :
dim(X) must have a positive length"
Каков наилучший способ сделать это?