我有一个数据框,其中包含一组变量的观察结果:
mydata <- data.frame(Sample = c("A", "B", "C", "D"),
V1 = c(25, 27, 18, 29),
V2 = c(32, 45, 28, 30),
V3 = c(16, 32, 29, 22),
V4 = c(27, 29, 28, 32))
我需要根据特定于变量的常量E转换每列中的数据,我已将其存储在另一个数据框中:
e <- data.frame(Var = c("V1", "V3", "V2", "V4"), E = c(2, 1.4, 1.7, 1.8))
我想要一个新的数据框,其中包含mydata
中数据的转换值,基于e
中每个变量的正确常量,其中新值为
=1/E^(value in mydata)
我知道如何使用lapply
循环遍历mydata
中的每一列,我只是不知道如何指定每列的E值需要来自{{1} },基于变量名称。 (e
中的值与e
中的列的顺序不同,并且在某些情况下mydata
中将有未使用的行,即不是变量的E值出现在e
。
如何根据变量名称和不同数据框中E的相应值,将数据转换应用于一个数据框的每一列?
答案 0 :(得分:2)
以下是我接近它的方法。我会循环遍历列名称而不是循环遍历列:
sapply(colnames(mydata)[-1], function(x) 1/(e$E[e$Var == x]^mydata[,x]))
# V1 V2 V3 V4
# [1,] 2.980232e-08 4.223131e-08 4.591467e-03 1.281275e-07
# [2,] 7.450581e-09 4.263817e-11 2.108157e-05 3.954553e-08
# [3,] 3.814697e-06 3.527201e-07 5.784782e-05 7.118195e-08
# [4,] 1.862645e-09 1.220485e-07 6.097941e-04 6.780783e-09
如果你正在寻找别的东西,请告诉我。