2012-06-29 72 views
2

我有一個數據框,有500行,每行至少有十幾列。有些行有更多的列。我想要做的是創建一個變量,其中包含每行最後一個填充的單元格的內容。取最後一個填充的單元格在data.frame中的每一行R

dput(頭(calls_with_overlap,10))

A  B  C  D 
1. aknasd kasdknsd kasdkas kasdpa 
2. asdhad none 
3. apihsd piahsdas ashpidapishd phasd askdn wads 
4. kasdas none 

我試過到目前爲止:

if (calls_with_overlap$Overlap[10] = "none") 
{ 
Ending <- TRUE 
} 
else (Ending <- FALSE) 
if (Ending == FALSE) 
    { 
    for (q in 1:1024) #max is 1024 columns. perhaps not best way for number of columns. 
    { 
    EndingCell <- c(10 + q) 
    EndingCellcontents <- calls_with_overlap[h,EndingCell] # h is from an outer loop, going through each row. 
    if (EndingCellcontents != ""){ 
     EndingCellcontents[q] <- EndingCellcontents} 
     last <- length(EndingCellcontents) 
     last<- EndingCellcontents[last] 
     }} 

我想 「最後」 包含每一行的最後一個填充單元,除非它說「沒有」。從B列

即,在這種情況下開始

last 
[1] kasdpa 
[2] wads 

道歉,如果這是一個nooby的問題,但我自學從頭開始編程。

+0

我猜你的意思不是這樣呢? – cianius

+0

你不能有一個看起來像這樣的數據框。 IT必須是矩形的。某種程度上是否填滿了空單元格?新加坡或「」?如果你遵循ttmaccer的指示,它會更容易幫助。因此,使用mtcars set:'dput(head(mtcars,10))'只需將mtcars替換爲數據集的名稱即可。 –

+0

空單元格爲空。這是一個導入的文件。編輯: – cianius

回答

3

編輯:錯誤的行和列

df <- data.frame(A=c("r","","z"),B=c("w","","")) 
df 
    A B 
1 r w 
2  
3 z 
v <- apply(df, 1, function(x) x[rev(which((x!="")==TRUE))[1]]) 
[1] "w" NA "z" 
v[!is.na(v)] 
[1] "w" "z" 
+0

:你已經修好了。這是非常接近的,但在這種情況下,我想它命令w然後z。 – cianius

+0

謝謝朱利葉斯,工作就像一個魅力。我想知道這需要多長時間才能學到... – cianius

+0

不客氣。這並不像看起來那麼困難,但要注意「應用」,它會對你有很大的幫助。 '這簡單而有幫助,其餘的都放在一起。 – Julius

相關問題