小编Dan*_*wer的帖子

比'for'循环使用R更有效的方法

我是R的相对新人,所以如果对此有明显的答案,我很抱歉.我已经查看了其他问题,我认为"应用"是答案,但在这种情况下我无法弄清楚如何使用它.

我有一个纵向调查,每年邀请参与者.有些年份他们没有参加,有时他们会死.从调查开始以来,我需要确定哪些参与者参与了一致的"连胜"(即如果他们停止,他们就会停下来).

我用'for'循环完成了这个,在下面的例子中工作正常.但是我有很多年和很多参与者,而且循环非常慢.我可以用更快的方法吗?

在示例中,TRUE表示他们参加了那一年.循环创造了两个向量 - 他们参与的最后一年的'finalyear',并且'streak'表示他们是否在最后一年(即案例1,3和5)完成了所有年份.

dat <- data.frame(ids = 1:5, "1999" = c(T, T, T, F, T), "2000" = c(T, F, T, F, T), "2001" = c(T, T, T, T, T), "2002" = c(F, T, T, T, T), "2003" = c(F, T, T, T, F))
finalyear <- NULL
streak <- NULL
for (i in 1:nrow(dat)) {
    x <- as.numeric(dat[i,2:6])
    y <- max(grep(1, x))
    finalyear[i] <- y
    streak[i] <- sum(x) == y
}
dat$finalyear <- finalyear
dat$streak <- streak
Run Code Online (Sandbox Code Playgroud)

谢谢!

for-loop r survey apply

7
推荐指数
1
解决办法
238
查看次数

是否有 R 函数“并行和”?

我想对包含 NA 的向量求和。

例如:

a <- c(5, 3, 1, NA, 2)
b <- c(NA, 1, 2, 1, 7)
Run Code Online (Sandbox Code Playgroud)

预期输出将是:

[1] 5 4 3 1 9
Run Code Online (Sandbox Code Playgroud)

sum在这种情况下不起作用,sum(a, b, na.rm = T)相当于sum(c(a, b), na.rm = T).

+确实有效(即a + b)但不会删除NAs。

您可以使用rowSums(cbind(a, b), na.rm = T),但实际上这可能会导致代码混乱 - 例如,如果向量是data.table.

是否有等价的pmaxfor sum,例如psum(a, b, na.rm = T)?

r

5
推荐指数
1
解决办法
343
查看次数

标签 统计

r ×2

apply ×1

for-loop ×1

survey ×1