2012-06-29 46 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

相关问题