2014-10-28 19 views
5

Tôi có một khung dữ liệu như vậy:R: Return Element Đầu tiên và Chức vụ tại Mỗi Row của một khung dữ liệu

Keyword 1 2 3 4 5 
a  0.7 NA NA 0.3 0.4 
b   NA NA 0.5 NA NA 
c   NA 0.2 NA NA 0.3 
d   NA NA NA 0.3 0.4 

Tôi muốn để có được nó để kết quả cho tôi này:

Keyword First Value 
a   1  0.7 
b   3  0.5 
c   2  0.2 
d   4  0.3 

Tôi sẽ làm như thế nào?

Cảm ơn.


Giải pháp làm việc kỳ diệu.

gì nếu tôi muốn giá trị cuối cùng để kết quả trông như thế này:

Keyword Last Value 
a   5  0.4 
b   3  0.5 
c   5  0.3 
d   5  0.4 

Tôi không thể nói mà chỉ số thay đổi.

Cảm ơn.

Trả lời

3
DF <- read.table(text="Keyword 1 2 3 4 5 
a  0.7 NA NA 0.3 0.4 
b   NA NA 0.5 NA NA 
c   NA 0.2 NA NA 0.3 
d   NA NA NA 0.3 0.4 
e   NA NA NA NA NA", header=TRUE) 

setNames(
    data.frame(DF[,1], 
      t(apply(DF[-1], 1, function(x) { 
       ind <- which(!is.na((x)))[1] 
       c(ind, x[ind]) 
      })) 
), c("Keyword", "First", "Value")) 
# Keyword First Value 
#1  a  1 0.7 
#2  b  3 0.5 
#3  c  2 0.2 
#4  d  4 0.3 
#5  e NA NA 
+0

Tôi chỉ đăng giải pháp chính xác cùng ... Tại sao bạn lại thêm hàng 'e'? –

+0

@DavidArenburg Để minh họa một trường hợp OP không được đề cập trong ví dụ của họ. – Roland

+0

Giải pháp làm việc kỳ diệu. Nếu tôi muốn giá trị cuối cùng thì sao? – Cinji18

0

Dưới đây là một cách khác để làm điều đó bằng data.table

#Set object as data.table object 
require(data.table) 
setDT(DF) 

Bạn có thể sử dụng .SD để lướt qua mỗi giá trị của mỗi hàng

DF[ , .(First=which(!is.na(.SD))[1],Value=c(.SD)[which(!is.na(.SD))[1]]), by=Keyword] 

# Keyword First Value 
# 1:  a  1 0.7 
# 2:  b  3 0.5 
# 3:  c  2 0.2 
# 4:  d  4 0.3 
# 5:  e NA NULL 
Các vấn đề liên quan