列出样本中的第一个匹配项

时间:2013-12-20 08:35:41

标签: r

我有一个大型数据集(dt),如下所示:

No  Day1    Day2    Day3    Day4    Day5    Day6    Day7    Day8    Day9    Day10
x   0       0       0       0       0       0       0       1       0       0 
y   0       0       6       2       0       1       0       0       0       0
z   0       0       0       0       0       0       0       0       0       0
a   0       0       2       4       1       1       0       0       0       0

我希望R为每一行创建一个列向量,当天(即使列索引很好)首先遇到一个非零的数字(某些行只有零)。我有点笨重的代码(下面)似乎在我迭代地(逐行,使用浏览器)这样做时工作,但是当我把它作为循环运行时。我明白了: “if(dt [i,j]> 0.5){:参数长度为零时出错” 有人可以告诉我我做错了什么吗? 谢谢 詹姆斯

days<-c()
for (i in 1:length(rownames(dt))) {
    for (j in 2:11) {

if (dt[i,j]>0.5) {
  x<-j
  break
}
  else {
  next
}
days<-rbind(days,x)
days
}
days
}

1 个答案:

答案 0 :(得分:1)

喜欢这个吗?

DF <- read.table(text="No  Day1    Day2    Day3    Day4    Day5    Day6    Day7    Day8    Day9    Day10
x   0       0       0       0       0       0       0       1       0       0 
y   0       0       6       2       0       1       0       0       0       0
z   0       0       0       0       0       0       0       0       0       0
a   0       0       2       4       1       1       0       0       0       0", header=TRUE)

cbind.data.frame(No=DF[,1],
                 first=apply(DF[,-1],1, function(x) which(x!=0)[1]))
#   No first
# 1  x     8
# 2  y     3
# 3  z    NA
# 4  a     3

或者:

library(reshape2)
DF <- melt(DF)

library(plyr)
ddply(DF, .(No), summarize, first=variable[(value!=0)][1])
#   No first
# 1  a  Day3
# 2  x  Day8
# 3  y  Day3
# 4  z  <NA>