2017-06-06 72 views
-1

我想重複在單數列中有差異的重複觀察。在這個例子中,我試圖用相同的id號碼來區分觀察值,但差別標籤號碼。我打算製作自己的函數,然後使用lapply函數來完成我的數據集。函數語法//推廣函數

截至目前我的代碼看起來像:

test.function <- (i) { 
    if(test.data[i, "id"] == test.data[i-1, "id"] & 
    test.data[i, "tag.num"] != test.data[i-1, "tag.num"]){ 
    id.tag <- subset(i) 
    } 
} 

lapply (test.data, test.function) 

我有一個關於上述聲明的一些問題。最重要的是,我不斷收到:

Error: unexpected '{' in "test.data <- (i) {" 

我真的不知道爲什麼這情況持續發生任何指導,將不勝感激。

當前數據集的樣子(999僅僅是一個缺失值指標):

id  tag.num 
1000 999 
1000 A49038483 
1100 999 
1100 A49294883 
1200 999 
1200 999 

再次,我只是想與不同的標籤數子集相同的ID。在這個例子中,我試圖對id 1000和1100進行子集4觀察。

此外,我想知道我的if語句裏面的語法,以及是否有必要指定我的數據集名稱。我希望在我的原始數據集中的幾個不同的列上應用這個函數。如果有一種更一般的方法可以設置它,然後能夠對所有適用的列運行lapply函數,那將是非常好的知識。任何和所有的幫助表示讚賞。

+0

你錯過了')'。在第三行的末尾,在'{'之前。 – Masoud

回答

1

至於錯誤,你缺少一個function)

test.function <- function(i) { 
    if(test.data[i, "id"] == test.data[i-1, "id"] & 
    test.data[i, "tag.num"] != test.data[i-1, "tag.num"]){ 
     id.tag <- subset(i) 
    } 
} 

運行沒有任何錯誤。

+0

嗨,很抱歉,這實際上是我輸入的錯誤。原始代碼有一個關閉的括號 – DPek

+0

@Dpek我可能能夠幫助你按照你想要的方式工作,但是就目前而言,我不能說出你期望的功能,或者什麼預期的產出應該是。 – BLT

0

爲R中定義的函數,語法是

fun.name <- function(args) {...} 

所以你需要function(i),你有以上只是(i)

我還建議,如果你想跨lapply橫跨你的數據集的行,你可能不需要那樣做。

這並不完全清楚你想要做什麼。你可以發佈一個數據樣本,你希望找回什麼?

+0

嗨亞歷克斯對不起,遺漏的括號是一個錯字,並在我原來的代碼。我上傳了一個示例數據集。但是,我試圖對原始數據集進行子集化,而不是對其進行修改。 – DPek