【问题标题】:Interact hundreds of variables交互数百个变量
【发布时间】:2020-12-29 12:14:35
【问题描述】:

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

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 分别与以 destvia 开头的变量,(在我的原始数据集中,我有数百个以这些词开头的变量) .

我已经手动尝试过 (SIZExDUMMY),但要进行所有可能的交互需要很长时间。

所以最后新数据库必须看起来像交互。您对获得此结果有何建议?

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)

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

有什么线索吗?

谢谢

【问题讨论】:

    标签: r regression interaction


    【解决方案1】:
    • 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)
    

    【讨论】:

    • 有没有一种方法可以恢复与开始时相同类型的变量?我的意思是,“撤消”“type.convert()”?
    • 为什么要将数字保留为字符?您无法撤消 type.convert。您可以将cols 转回角色。 original[cols] &lt;- lapply(original[cols], as.character)
    • 在原始数据库中,我有作为因子的数字(即使字符是一个很好的解释,因为这些情况下的数字既不代表基数也不代表顺序),但是它们被读取为具有类型的整数。转变。问题可能类似于“可以保存每个旧列的类型并将其放入转换后的数据库中(不希望它们都是字符,因为我也有可能是数字的数字向量)?”跨度>
    • 您可以保留原始对象的副本,应用转换并将类从副本中更改回来。查看更新的答案。
    • 我认为您在 R original <- data.frame(id, size, dest1, dest2, via1, via2, value, stringsAsFactors = FALSE) 的数据
    猜你喜欢
    • 2015-01-28
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2011-01-06
    • 2020-06-22
    相关资源
    最近更新 更多