交互数百个变量

问题描述

来自我的数据集原始变量大小是数字(可以转换为数字,其中small = 1,medium = 2,large = 3)。

id <- c('1','2','3','4','5')
size <- c('small','large','small','medium')
dest1 <- c('1','0','1','1')
dest2 <- c('0','1')
via1 <- c('1','0')
via2 <- c('1','1')
value <- c('4','561','310','106','8')

original <- data.frame(id,size,dest1,dest2,via1,via2,value)

我想以系统的方式交互,变量 size 分别以 destvia 开头,(在我的原始数据集中,我有数百个变量开始用这些话)。

我已经手动尝试过(SIZExDUMMY),但是对于所有可能的交互,像这样进行需要很多时间。

所以最后新数据库必须看起来像交互。您对获得这个结果的建议是什么?

size_dest1 <- c('1','2')
size_dest2 <- c('0','2')
size_via1 <- c('1','0')
size_via2 <- c('1','2')
interacted <- data.frame(id,value,size_dest1,size_dest2,size_via1,size_via2)

这样第一次交互是 size x dest1 = c(1,3,1,2) xc(1,1) = c(1,2) = size_dest1。同样的想法适用于 size_dest2,....,....

有什么线索吗?

谢谢

解决方法

  • size 列转换为 factor 并指定 levels
  • 创建要与 Size 相乘的列名称向量。
  • 将因子转换为整数并将其与所有列相乘以创建新列。
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)