0
將因子向量(不是所有級別都是唯一的)轉換爲bash中的數字向量的最有效方法是什麼?只要每個數字代表唯一的因子水平,數字向量中的值就不重要。在bash中將因子轉換爲數字
爲了說明,這將是R相當於什麼我想在bash的事:
數字< -seq_along(水平(因素))[因素]
即:
因素
AV1019A
ABG1787
AV1019A
B77hhA
B77hhA
數字
非常感謝。
將因子向量(不是所有級別都是唯一的)轉換爲bash中的數字向量的最有效方法是什麼?只要每個數字代表唯一的因子水平,數字向量中的值就不重要。在bash中將因子轉換爲數字
爲了說明,這將是R相當於什麼我想在bash的事:
數字< -seq_along(水平(因素))[因素]
即:
因素
AV1019A
ABG1787
AV1019A
B77hhA
B77hhA
數字
非常感謝。
這很可能不是最有效的,但也許開始。
#!/bin/bash
input_data=$(mktemp)
map_file=$(mktemp)
# your example written to a file
echo -e "AV1019A\nABG1787\nAV1019A\nB77hhA\nB77hhA" >> $input_data
# create a map <numeric, factor> and write to file
idx=0
for factor in $(cat $input_data | sort -u)
do
echo $idx $factor
let idx=$idx+1
done > $map_file
# go through your file again and replace values with keys
while read line
do
key=$(cat $map_file | grep -e ".* ${line}$" | awk '{print $1}')
echo $key
done < $input_data
# cleanup
rm -f $input_data $map_file
我最初想要使用關聯數組,但它只是一個bash 4+特性,並且在這裏和那裏都不可用。如果你有bash 4,那麼你有一個文件少,這顯然更有效。
#!/bin/bash
# your example written to a file
input_data=$(mktemp)
echo -e "AV1019A\nABG1787\nAV1019A\nB77hhA\nB77hhA" >> $input_data
# declare an array
declare -a factor_map=($(cat $input_data | sort -u | tr "\n" " "))
# go through your file replace values with keys
while read line
do
echo ${factor_map[@]/$line//} | cut -d/ -f1 | wc -w | tr -d ' '
done < $input_data
# cleanup
rm -f $input_data
嘗試添加一些例子來說清楚。 – anubhava
「只要每個數字表示一個唯一的因子水平,數字向量中的值就不重要了」 - 散列怎麼樣?沒有bash內建的,只是呼叫你最喜歡的hasher。 '回聲AV1019A | sha1sum'或'echo AV1019A | sum'。 –
在這種情況下什麼是_factor_? –