Вычтите ряд цен в одном кадре данных из столбцов в другом
У меня есть фрейм данных с 163 столбцами с уникальными именами, скажем (x1, x2, x3, x4 ....), каждый из этих столбцов имеет ряд возвращений (0.248, -0.00384 и т. Д.).
**DF1**
x1 x2 x3 x4 .....
0.248 -0.00384 0.0394 0.0053 .....
В другом кадре данных у меня есть один столбец со списком одинаковых уникальных имен (x1, x2, x3, x4 ...) и другой со списком чисел (0.005, .001 и т. Д.).
**DF2**
x1 0.005
x2 0.001
x3 0.005
x4 0.0005
...
Моя конечная цель - вернуть фрейм данных с 163 столбцами (x1, x2 и т. Д.) С чистыми доходами каждого столбца (таким образом, столбец x1 - это исходный результат, вычтенный из 0,005, столбец x2 - исходный результат, вычтенный из 0,001 и т. Д.).
До сих пор я пытался отсортировать второй кадр данных, транспонировать и использовать unlist, чтобы получить вектор чисел, который я затем мог бы вычесть из каждого столбца (но я не могу понять, как вычесть из каждого столбца). Любая помощь в выяснении, как это сделать, была бы действительно полезной. Список уникальных имен во втором фрейме данных совпадает с первым фреймом данных, который также отсортирован в алфавитном порядке, поэтому его не нужно сопоставлять (оба отсортированных будут выстроены в линию).
1 ответ
В случае, если имена DF1
и имена строк DF2
не в том же порядке, вы можете использовать match
DF1-DF2[match(colnames(DF1), rownames(DF2)),1][col(DF1)]
Должно работать, если один или оба набора данных не в том же порядке. Например
set.seed(65)
DF1N <- DF1[,sample(colnames(DF1))]
DF1N-DF2[match(colnames(DF1N), rownames(DF2)),1][col(DF1N)]
Если они в порядке
DF1-DF2[,1][col(DF1)]
данные
set.seed(24)
DF1 <- as.data.frame(matrix(rnorm(40*10), ncol=10,
dimnames=list(NULL, paste0("x", 1:10))) )
set.seed(42)
DF2 <- data.frame(Col1=rnorm(10, 0.01))
row.names(DF2) <- sample(paste0("x",1:10))