R 交互数百个变量

R 交互数百个变量,r,regression,interaction,R,Regression,Interaction,从我的数据集原始变量大小为数值(可以转换为数值,其中小=1,中=2,大=3) 这样,第一个交互作用是sizexdest1=c(1,3,1,1,2)xc(1,0,1,0,1)=c(1,0,1,0,2)=size\u dest1。同样的想法也适用于尺寸2、…、尺寸1、尺寸2、 有线索吗 谢谢 使用指定的级别将大小列转换为系数 创建要与大小相乘的列名向量 将因子转换为整数并与所有列相乘以创建新列 original是否有一种方法可以恢复与开始时相同类型的变量?我的意思是“撤销”type.convert

从我的数据集原始变量大小为数值(可以转换为数值,其中小=1,中=2,大=3

这样,第一个交互作用是sizexdest1=c(1,3,1,1,2)xc(1,0,1,0,1)=c(1,0,1,0,2)=size\u dest1。同样的想法也适用于尺寸2、…、尺寸1、尺寸2、

有线索吗

谢谢

  • 使用指定的
    级别将
    大小
    列转换为
    系数
  • 创建要与
    大小相乘的列名向量
  • 将因子转换为整数并与所有列相乘以创建新列

original是否有一种方法可以恢复与开始时相同类型的变量?我的意思是“撤销”type.convert()?为什么要将数字保留为字符?无法撤消
类型。转换
。您可以将
cols
返回到character
original[cols]在原始数据库中,我有作为因子的数字(即使字符是一个很好的解释,因为在这些情况下,数字既不表示基数也不表示顺序),但它们的读取方式与type.convert的整数类似。问题可能类似于“可以保存每个旧列的类型并将其放入转换后的数据库中(不希望它们都是字符,因为我还有可能是数字的数字向量)?”您可以保留原始对象的副本,应用转换并从副本中更改回类。请参阅更新的答案。我认为您使用的是R<4.0.0,它正在将字符转换为因子。尝试将数据与
original一起使用
id <- c('1','2','3','4', '5')
size <- c('small', 'large', 'small', 'small', 'medium')
dest1 <- c('1', '0', '1', '0', '1')
dest2 <- c('0', '1', '1', '0', '1')
via1 <- c('1', '1', '0', '0', '0')
via2 <- c('1', '0', '1', '0', '1')
value <- c('4', '561', '310', '106', '8')

original <- data.frame(id, size, dest1, dest2, via1, via2, value)
size_dest1 <- c('1', '0', '1', '0', '2')
size_dest2 <- c('0', '3', '1', '0', '2')
size_via1 <- c('1', '3', '0', '0', '0')
size_via2 <- c('1', '0', '1', '0', '2')
interacted <- data.frame(id, size, dest1, dest2, via1, via2, value, size_dest1, size_dest2, size_via1, size_via2)
original <- type.convert(original)
original$size <- factor(original$size, c('small', 'medium', 'large'))

cols <- grep('dest|via', names(original), value = TRUE)
original[paste0('size_', cols)] <- as.integer(original$size) * original[cols]

original
#  id   size dest1 dest2 via1 via2 value size_dest1 size_dest2 size_via1 size_via2
#1  1  small     1     0    1    1     4          1          0         1         1
#2  2  large     0     1    1    0   561          0          3         3         0
#3  3  small     1     1    0    1   310          1          1         0         1
#4  4  small     0     0    0    0   106          0          0         0         0
#5  5 medium     1     1    0    1     8          2          2         0         2
copy <- original
#Trnaformation code from above
#...
#...

#Change the classes
original[names(copy)] <- Map(function(x, y) {class(x) <- class(y);x}, 
                             original[names(copy)], copy)