我需要将数据移至更高维度。我需要从x到exp(x ^ 2)的每一列转换,对于cl1和col 2列的每对x1和x2,我都需要一个新列,其值为exp(e ^ {-2xy})。这是一个小例子:(我的数据集中有更多列)
col1. col2. col3.
2 3 4
放出
col1. col2. col3. col(1,2) col(2,3) col(1,3)
exp(4) exp(9) exp(16) exp(-12). exp(-24) exp(-16)
答案 0 :(得分:1)
为使事情有趣,我将连续增加您的数据,以免马虎:-)
您的行排在第一位,然后进行验证。
dat <- data.frame(col1=2:3, col2=3:4, col3=4:5)
由于您的验证未进行实际计算,因此我将在初次运行时忽略exp()
。
第一个问题是直截了当的:
lapply(dat, function(a) (a^2))
# $col1
# [1] 4 9
# $col2
# [1] 9 16
# $col3
# [1] 16 25
第二个需要更多的工作,但不多:
combinations <- combn(3, 2)
combnames <- apply(combinations, 2, paste, collapse = "_")
setNames(data.frame(apply(combinations, 2, function(i) -2 * dat[,i[1]] * dat[,i[2]])),
combnames)
# 1_2 1_3 2_3
# 1 -12 -16 -24
# 2 -24 -30 -40
从这里开始,只是cbind
在一起。我现在包括了exp()
,但是使用exp(e^...)
似乎是一个错字,因此我也只能推断出exp()
用于第二批。
cbind(
lapply(dat, function(a) exp(a^2)),
setNames(data.frame(apply(combinations, 2, function(i) exp(-2 * dat[,i[1]] * dat[,i[2]]))),
combnames)
)
# col1 col2 col3 1_2 1_3 2_3
# 1 54.59815 8103.084 8886111 6.144212e-06 1.125352e-07 3.775135e-11
# 2 8103.08393 8886110.521 72004899337 3.775135e-11 9.357623e-14 4.248354e-18