(序言部分) 我不知道這是否是正確的地方...我實際上有一個問題解決/優化問題,用於計算表格。所以如果不是。非常抱歉,值得減。數據表中的特殊發生次數
這裏的數據幀
dat <- data.frame(id=letters[1:5],matrix(c(0,0,1,0,0, 0,1,0,1,1, 0,0,2,1,0, 1,0,2,1,1, 0,0,2,0,0, 0,1,2,1,0),5,6))
#
# id X1 X2 X3 X4 X5 X6
# 1 a 0 0 0 1 0 0
# 2 b 0 1 0 0 0 1
# 3 c 1 0 2 2 2 2
# 4 d 0 1 1 1 0 1
# 5 e 0 1 0 1 0 0
我想沿着每一行,多少次我們到1,我們有多少次從1到0。所以最終的結果應該算
# id N1 N0
# a 1 1
# b 2 1
# c 1 1
# d 2 1
# e 2 2
我實際上找到了一個算法,但它更多的是C/FORTRAN風格(下面在這裏),我不相信有沒有一種更加安全和更優雅的方式來得到這個在R.非常感謝任何幫助或提示。
nr <- nrow(dat)
nc <- ncol(dat)
rownames(dat) <- seq(1,nr,1)
colnames(dat) <- seq(1,nc,1)
dat$N1 <- NULL
dat$N2 <- NULL
for (i in 1:nr) {
n1 <- 0
n0 <- 0
j <- 2
while (!(j>nc)) {
k <- j
if (dat[i,k] == 1) {
n1 <- n1 + 1
k <- j + 1
while (!(k>nc)) {
if (dat[i,k] == 0) {
n0 <- n0 + 1
break
}
k <- k + 1
}
}
j <- k
j <- j + 1
}
dat$N1[i] <- n1
dat$N0[i] <- n0
}
在第二行中,您會從1到0兩次,不是? –
對!我改變了這個例子!謝謝! – Stefano
此外,第3行沒有從零到1的單個值另外,您始終具有0:2的值,或者您可以有任何值? –