2013-07-09 24 views
0

我有一個表格式,像這樣:如何在此基礎上設定的變量值列數包含字符串

F NF C NF C F C F NF 
F NF C C F NF NF C F 
NF C F F NF C C F NF 
NF C F C F NF F NF C 
C F NF F NF C NF C F 
C F NF NF C F F NF C 
F C NF NF F C C NF F 
F C NF C NF F NF F C 
NF F C F C NF C NF F 
NF F C C NF F F C NF 
C NF F F C NF NF F C 
C NF F NF F C F C NF 

我想用這個表將值設置爲某些項目,然後做了一堆東西(我認爲其中的具體細節值得討論)。我想將變量「a」,「b」和「c」設置爲等於NF在3個不同字符串(F,NF和C)中的位置。例如,我想使用for循環來讀取第一行,並將a設置爲2,b爲1(因爲NF位於第二組三列中的「第一列」),並且c爲3,則做一堆東西(因爲NF在第三組三列中的「第三」欄)。之後,我想它讀取第二行,並設置爲2,B爲3和C爲1.

我想不出一種方法來做到這一點,而不是使用醜陋的數量如果聲明。有其他選擇嗎?

感謝

+0

「表單」比較模糊,並且在R語境中不適用(我假設你來自Excel)。在你的問題中輸入你的輸入數據的'dput'語句的結果。 –

回答

1

您可以apply一個簡單的功能表中的每一行,或在這種情況下,挑選出表和apply到各行的功能,這些列的特定列:

> text = "F NF C NF C F C F NF 
+ F NF C C F NF NF C F 
+ NF C F F NF C C F NF 
+ NF C F C F NF F NF C 
+ C F NF F NF C NF C F 
+ C F NF NF C F F NF C 
+ F C NF NF F C C NF F 
+ F C NF C NF F NF F C 
+ NF F C F C NF C NF F 
+ NF F C C NF F F C NF 
+ C NF F F C NF NF F C 
+ C NF F NF F C F C NF" 
> x = read.table(text=text) 
> a = apply(x[1:3], 1, function(vec) which(vec == "NF")) 
> a 
[1] 2 2 1 1 3 3 3 3 1 1 2 2 
> b = apply(x[4:6], 1, function(vec) which(vec == "NF")) 
> b 
[1] 1 3 2 3 2 1 1 2 3 2 3 1 
> c = apply(x[7:9], 1, function(vec) which(vec == "NF")) 
> c 
[1] 3 1 3 2 1 2 2 1 2 3 1 3 

apply的第二個參數告訴它你要應用函數的表的哪一個維度,1是行和2列。

相關問題