R:返回数据帧的每一行中的第一个元素和位置

时间:2014-10-28 18:50:04

标签: r na

我有一个像这样的数据框:

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

我想得到它,以便结果给我这个:

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

我将如何这样做?

感谢。


解决方案创造了奇迹。

如果我想要最后一个值,结果如下所示:

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

我无法判断要更改的索引。

感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

以下是使用data.table

执行此操作的另一种方法
#Set object as data.table object
require(data.table)
setDT(DF)

您可以使用.SD循环浏览每一行的每个值

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