我有一个包含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来获取数字向量,然后我可以从每列中减去(但我无法弄清楚如何从每列中减去)。任何帮助找出如何做到这一点将是非常有帮助的。第二个数据框中的唯一名称列表与第一个数据帧相同,第一个数据帧也按字母顺序排序,因此不需要匹配(两个排序都将排成一行)。
答案 0 :(得分:1)
如果DF1
的同名和DF2
的rownames的顺序不同,您可以使用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))