行間計算很常見,累計,同期比,環比這些都會涉及到。r語言和集算器都有很好的行間計算能力,但又略有區別。
下面這個案例涉及一些基本的行間運算,可以通過它說明二者的區別:
比較直觀的解法是:
1.先按銷售員彙總,求得每個銷售員的銷售額.
2.將上一步的資料按照銷售額逆序排序
4.找到上一步中累計值能符合以下條件的銷售員的列表:小於等於比較標準;或者雖然大於比較標準,但上乙個銷售員是小於比較標準的。
r語言的具體解法是這樣的:
01library(rodbc)
02odbcdatasources()
03conn
04originaldata
05odbcclose(conn)
06 namesum
07names(namesum)
08orderdata
09halfsum
10orderdata$addup
11 subset(orderdata,addup<=halfsum| (addup>halfsum & c( 0, addup[- length (addup)])
下面是集算器的解法:
先看看計算累計值有什麼不同:
r語言在line 10使用cumsum求累計值。
集算器在a4格使用cumulate求累計值。
兩者寫法都很方便,但esproc的運算原理是針對每條紀錄,先算一遍cumulate,然後按照行號#取得這條紀錄對應的累計值。而r語言是只計算一遍,因此效率上比集算器高。
把集算器的這句拆成兩句可以解決效率的問題,即先單獨算累計值列表,再插入到原資料集中。但這種寫法又不如只需要一句**的r語言簡練。
接著再看計算符合條件的銷售員時有什麼不同:
r語言在line 11完成這項計算,主要用了移動行的辦法,使用c( 0, addup[- length (addup)])構造了一列新資料。和addup這列相比,新列只是向下移動了一行,去掉了最後一條資料並補上了第一條的0。這樣就可以進行比較了:累計值是否小於比較標準? 或者雖然大於比較標準但上一條紀錄是否小於比較標準?
r語言不能直接訪問相對位置的資料,所以採用了」讓相對位置的資料移到當前位置」的辦法,雖然效果是一樣的,但這個寫法不夠直觀,需要分析者具備較高的邏輯思維能力。
集算器的寫法是select(addup<=b3 || (addup>b3 &&addup[-1]集算器特有的相對位置表達方法,即可以用[-1]這種方法表示相對於當前紀錄的前1條或後幾條紀錄。比如a4中的累計值的計算,也可以寫成a3.derive(addup[-1]+salessum:addup)。
和累計值的固定演算法不同,這一步演算法更自由,集算器的相對位置表達方式比較靈活。
通過上面的例子可以看到,相對位置和行間運算運算可以解決很多看似複雜的問題,集算器在表達相對位置時更靈活,因此在進行複雜問題計算時估計會輕鬆許多。r語言在整列整行的追加以及固定演算法方面寫法則更加簡練。
R語言 和 操作的區別
返回的 x 是乙個 array 型別的資料,如果用 x 1 那麼將同樣返回乙個 array 型別的資料,該資料是 x 的第一列,是乙個子集。如果用 x 1 那麼將返回 array 資料中的第乙個資料,而不是乙個子集。同樣的當 x 的資料型別是 list 時,操作將返回乙個 list 資料型別,且將是...
R語言和Python連線hive
連線原理 r語言和python連線,r中讀取的資料可以傳遞到python中進行處理,同理python中的結果可以傳遞到r語言中進行,二者滿足雙向傳遞。而python連線hive的方法較多且簡單,因此採用python獲取hive資料庫中的資料,將資料再傳到r語言中,即可進行分析。在這點上,我個人覺得p...
r語言electricity資料集 R語言 資料集
第二章 建立資料集 1.r語言的資料型別 數值型 字元型 邏輯型 複數型 虛數 和原生型 位元組 2.資料結構 a.向量 儲存數值型 字元型和邏輯型資料的一維陣列 a c 1,2,3,4,5 建立 組合功能的函式c a 1 1 2 3 4 5 a c 1,4 訪問 方括號 向量中指定的元素 1 1 ...