Functions of esProc/R/Python/Perl in Structured Data Process by Comparison :6. Modifying Field Value

esProc

  1. modify(2,col1*5:col1,col2+3:col2)       //field value col1 recorded in Row 2 of Table Sequence tbl is changed to col1*5, and field value col2 to col2+3
  2. modify(2:5,col1*5:col1,col2+3:col2)          //Subsequent 5 Rows are modified from Row 2 in a consecutive way

//Modify the two Table sequences in the same dimension synchronously

A1=db.query(“select id,name,salary from salary order by id”)

A2=db.query(“select id,bonus from bonus order by id”)

A1.modify(1:A2,salary+bonus:salary)               //A1 and A2 are sorted by id field, and bonus field value of A2 is added to the salary field of A1 in sequence

Perl

    # In Perl, it is more convenient to modify the element value for 1D array, and you can directly assign a value, such as:

    @a=(1,2,3);

    $a[2]=$a[2]*2;                   # Multiply the third element value by 2

    Foreach (@a){           #Loop through the array @a, and multiply each element value by 2; $_ indicates the current element

             $_=$_*2;

    }

     map {$_=$_*2}@a;          # It is also allowed to use a loop function map to multiply any element value by 2

The syntax for Loop function map is more convenient, but it only provides a loop variable $_ used to indicate the current element. No loop sequence number can be available. A variablecumulative sum must be otherwise defined if you want to perform filter operation depending on member sequence numbers, which will get you into a same awkward situation as that caused in writing the loop statements.

    # 2D arrays come here as follows: 

    my @table=([1,”Zhang San”,3000,33],

                            [2,”Li Si”,5000,45],

                            [3,”Wang Wu”,6000,40]

                            );

    $table[1][2]=$table[1][2]*2;    # Multiply the values of Column 3 in Row 2 of 2D array @table by 2

    $table[1][3]=$table[1][3]+2;    #If the values of two fields are modified synchronously, two statements must be needed

    # If you want to modify several rows continuously, only the loop statement is written as below:

    for $i(1..5){       #Modify a queue of rows from Row 2 to Row 6

             $table[$i][2]=$table[$i][2]*2; 

    $table[$i][3]=$table[$i][3]+2;

    } 

    # If the two 2D tables in the same dimension and with same sequence will be modified, for example:

    my @salary=([1,”Zhang San”,3000,33],

                            [2,”Li Si”,5000,45],

                            [3,”Wang Wu”,6000,40]

                            );

    my @bonus=([1,750],

                            [2,800],

                            [3,950]

                            );

    foreach $i(0..$#salary){   #Repeat the operation for each record, and add the values of Column 2 in the bonus to Column 3 of salary

         $salary[$i][2]=$salary[$i][2]+$bonus[$i][1];

    }

Python

    # coding=gbk 

    a=[1,2,3,4]

    a[2]=10              # Modify the value of individual element in 1D array 

    for i in range(0,len(a)):              #Modify the values of all the elements in 1D array

             a[i]=a[i]*3 

    data = [   [121.1, 0.02, 0.02],

                   [121.1, 0.05, 0.05],

                   [122.1, 0.56, 0.6],

                   [122.1, 3.79, 4.04],

                   [123.1, 93.75, 100.0],

                   [123.1, 0.01, 0.01],

                   [124.1, 0.01, 0.01],

                   [124.1, 1.01, 1.08],

                   [124.1, 0.11, 0.11],

                   [124.1, 0.05, 0.06],

                   [125.1, 0.39, 0.41],]

    data[2][1]=5                                        #Modify the value of individual element in 2D array

    for i in range(0,len(data)):                 #Modify the values of a column in 2D array

             data[i][1]=data[i][1]*3 

    #Two 2D arrays are modified synchronously as below

    salary=[[1,”Zhang San”,3000,33],

                   [2,”Li Si”,5000,45],

                   [3,”Wang Wu”,6000,40]]

    bonus=[[1,750],

                   [2,800],

                   [3,950]]

    for i in range(0,len(salary)):     #Repeat the above operation for each record, the values of Column 2 in the bonus are added to Column 3 of salary

salary[i][2]= salary[i][2]+ bonus[i][1];

Loop functions for array-modification is unavailable in Python, and you need to write a loop program to achieve this action; column-based operations for 2D array can be achieved only by writing the loop codes

R

tbl$c2=tbl$c2*5       #The value of Column c2 is modified as original value times 5

tbl [tbl$c1<5,]$c2=tbl[tbl$c1<5,]$c2+5            #The record field c2, for which c1<5 is true, is modified as original value plus 5

tbl [c(1,2,4),]$c2=tbl[c(1,2,4),]$c2+5                #The field values of Rows 1, 2 and 4 are modified

Synchronous modification for two data frames is not directly supported, which needs to be achieved by coding.

esProc r perl python_function_comparison

Advertisements

About datathinker

a technical consultant on Database performance optimization, Database storage expansion, Off-database computation. personal blog at: datakeywrod, website: raqsoft
This entry was posted in Structured Data Process and tagged , , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s