R:返回的第一个元素和位置数据帧
问题描述:
我有一个数据帧像这样的每一行:R:返回的第一个元素和位置数据帧
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
我不能告诉要更改的索引。
谢谢。
答
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
答
这里有一个其他方式使用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
我只是张贴完全相同的解决方案...为什么你加了'e'行? – 2014-10-28 19:04:00
@DavidArenburg为了说明OP在他们的例子中没有涉及的情况。 – Roland 2014-10-29 07:35:10
解决方案创造了奇迹。如果我想要最后一个值怎么办? – Cinji18 2014-10-29 18:07:16