Fab*_*AS7 2 r multiplication dataset
我有一个这样的数据集。
> dataset
| ID | 一种 | 乙 | C | d |
|---|---|---|---|---|
| 1 | 10 | 1 | 30 | 50 |
| 2 | 5 | 0 | 5 | 60 |
| 3 | 20 | 1 | 18 | 90 |
| 4 | 103 | 0 | 20 | 80 |
| 5 | 16 | 1 | 56 | 100 |
依此类推,与要求相关的列数最多为“n”。
我在研究领域的同事进行了某些分析,他们给我的输入是一个数据框。其中行名称对应于新数据集的感兴趣变量。
像这样的东西。
> rownames(Features)
| 一种 |
| 乙 |
| d |
| 广告 |
| 乙:丁 |
| 公元前 |
| a:c |
其中冒号 (:) 代表“产品”。因此,为了继续工作,我需要将这些产品包含在原始数据集中。
我手动创建了一个以下列方式重现乘法的函数(其中 x 代表我的原始数据集):
Products<- function(x){x<- x %>% mutate(Product1=x$a*x$d)
x<- x %>% mutate(Product2=x$b*x$d)
x<- x %>% mutate(Product3=x$b*x$c)
x<- x %>% mutate(Product4=x$a*x$c)
return(x)}
Run Code Online (Sandbox Code Playgroud)
但是,考虑到要创建的产品数量每次都是可变的,我想找到一种方法来自动创建这些列乘法,并使用它们给我的名称作为输入。我确定我的方法不是最好的,所以非常欢迎任何帮助。
这似乎是在进行一些建模,选择:代表产品是非常有趣的,因为建模世界中经常出现这种情况。在基础 R 中,您可以执行以下操作:
model.matrix(reformulate(c(-1,rownames(Features))), dataset)
a b d a:d b:d b:c a:c
1 10 1 50 500 50 30 300
2 5 0 60 300 0 0 25
3 20 1 90 1800 90 18 360
4 103 0 80 8240 0 0 2060
5 16 1 100 1600 100 56 896
Run Code Online (Sandbox Code Playgroud)
我添加-1是为了删除拦截。否则你可以维护它。另请注意,这是一个矩阵,然后您可以将其更改为数据框。