我有一个大型数据集(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
}
答案 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>