我需要對列執行函數以填充另一列,該列表示行中的數字是增長還是(保留或減少)。我正在做考慮4個值:r函數在if語句列上
df<-data.frame(a=c('cli1','cli2','cli3'),b=c(3,8,6), c=c(2,6,7), d=5:7, e=c(1,5,10), f=1:3)
職能是:
f2<-function (tbl) {x<-data.frame(cid=tbl[,1])
for (i in 5:(ncol(tbl))) {
if
((tbl[,i]+tbl[,i-1])/(tbl[,i-2]+tbl[,i-3])-1 >0)
{Y='sube'}
else if
((tbl[,i]+tbl[,i-1])/(tbl[,i-2]+tbl[,i-3])-1<=0)
{Y='baja'}
x[,paste('_Disc',colnames(tbl)[i],sep='')]<-Y
}
return (x)}
當我應用它,我得到:
Warning messages: 1: In if ((tbl[, i] + tbl[, i - 1])/(tbl[, i - 2] + tbl[, i - 3]) > : the condition has length > 1 and only the first element will be used
我怎麼能使用if如果行iwthout使用另一個爲?謝謝。
您違反了很多語法規則。從一些小東西開始,測試,然後從那裏慢慢構建。嘗試縮進你的代碼,就像人們推薦使它更易讀一樣(並且你會發現你有不平衡的'{}')。另外,'和'和'then'不是R語法的一部分。 – flodel 2014-09-28 17:04:54
@ flodel謝謝我改變了它,現在編譯,但仍然出現錯誤。我認爲可能是這樣的情況,如果不能處理列數組並逐行評估它們。我怎樣才能輕鬆解決問題,而不必另外介紹? – GabyLP 2014-09-28 17:34:15
@Gaby P你有多個值,其中一些是NAs。我不知道你想如何評估它。例如,在第一種情況下:'indx1 < - (df [,5] + df [,4])/(df [,3] + df [,2]);所有(na.omit(indx1)> 0)#[1] TRUE'是否像我顯示的那樣?在這種情況下,你可以使用'if(all(na.omit(indx1)> 0))' – akrun 2014-09-28 17:47:15