我有一个像这样的数据框:
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
我无法判断要更改的索引。
感谢。
答案 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