How to multiply many columns
Hello,
I'm new at rapid miner. I have a problem with multiplying values from columns.
Let's imagine I have 4 columns: A,B,C,D. I want to multiply each column B,C,D with A.
I know I can make it by using 'Generate Attributes', but I have about 100 columns co it is a little bit hard to do it. What's more I would like to have new values of that columns, not the new additional columns.
For example I have:
A B C D
3 1 2 1
4 2 2 1
5 3 1 2
and what I want to have is:
A B C D
3 3 6 3
4 8 8 4
5 15 5 10
I would be grateful for any advice.
Answers
-
Just use "Generate Attributes" inside a "Loop Attributes" and you only have to configure it once and RapidMiner will do all the rest of the work for you. And if you want to overwrite your original attributes, just use the same attribute name with a macro inside the Loop Attributes (if you wanted a new name you could just use the macro and add "_new" to the end).
1 -
Here's a process example based on Telecontar's solution.
<?xml version="1.0" encoding="UTF-8"?><process version="8.2.000">
<context>
<input/>
<output/>
<macros/>
</context>
<operator activated="true" class="process" compatibility="8.2.000" expanded="true" name="Process">
<process expanded="true">
<operator activated="true" breakpoints="after" class="operator_toolbox:create_exampleset" compatibility="1.0.000" expanded="true" height="68" name="Create ExampleSet" width="90" x="45" y="34">
<list key="function_descriptions">
<parameter key="A" value="rand()"/>
<parameter key="B" value="rand()"/>
<parameter key="C" value="rand()"/>
<parameter key="D" value="rand()"/>
<parameter key="E" value="rand()"/>
</list>
<list key="numeric_series_configuration"/>
<list key="date_series_configuration"/>
<list key="date_series_configuration (interval)"/>
</operator>
<operator activated="true" class="concurrency:loop_attributes" compatibility="8.2.000" expanded="true" height="82" name="Loop Attributes" width="90" x="246" y="34">
<parameter key="attribute_filter_type" value="single"/>
<parameter key="attribute" value="A"/>
<parameter key="invert_selection" value="true"/>
<parameter key="reuse_results" value="true"/>
<process expanded="true">
<operator activated="true" class="generate_attributes" compatibility="8.2.000" expanded="true" height="82" name="Generate Attributes" width="90" x="179" y="34">
<list key="function_descriptions">
<parameter key="%{loop_attribute}" value="A * eval(%{loop_attribute})"/>
</list>
</operator>
<connect from_port="input 1" to_op="Generate Attributes" to_port="example set input"/>
<connect from_op="Generate Attributes" from_port="example set output" to_port="output 1"/>
<portSpacing port="source_input 1" spacing="0"/>
<portSpacing port="source_input 2" spacing="0"/>
<portSpacing port="sink_output 1" spacing="0"/>
<portSpacing port="sink_output 2" spacing="0"/>
</process>
</operator>
<connect from_op="Create ExampleSet" from_port="output" to_op="Loop Attributes" to_port="input 1"/>
<connect from_op="Loop Attributes" from_port="output 1" to_port="result 1"/>
<portSpacing port="source_input 1" spacing="0"/>
<portSpacing port="sink_result 1" spacing="0"/>
<portSpacing port="sink_result 2" spacing="0"/>
</process>
</operator>
</process>1