【发布时间】:2016-01-17 13:08:52
【问题描述】:
我有一个看起来像这样的数据框:
x y
1 a
1 b
1 c
1 NA
1 NA
2 d
2 e
2 NA
2 NA
我想要的输出应该是一个数据框,它应该显示 Y 的所有完整案例(即非 NA 值)与相应 X 的总和。因此,如果假设 Y 对 X = 1 有 2500 个完整观察值,和 X = 2 的 557 个观察值,我应该得到这个简单的数据框:
x y(c.cases)
1 2500
2 557
目前我的函数表现良好,但仅适用于单个 X,但当我提到 X 是一个范围(例如 30:25)时,我会得到所有指定 Y 的总和,而不是每个 X 的单独完整观察值。这是我的功能大纲:
complete <- function(){
files <- file.list()
dat<- c() #Creates an empty vector
Y <- c() #Empty vector that will list down the Ys
result <- c()
for(i in c(X)){
dat <- rbind(dat, read.csv(files[i]))
}
dat_subset_Y <- dat[which(dat[, 'X'] %in% x), ]
Y <- c(Y, sum(complete.cases(dat)))
result <- cbind(X, Y)
print(result)
}
没有错误或警告消息,但只有一系列 X 中的错误结果。
【问题讨论】:
-
我想知道为什么有这么多关于 SO 请求使用 FOR 循环的解决方案的 R 问题。
-
@RHertel 那是因为循环是最常见的方法之一,像 dplyr 这样的包提供了独特的新语法来代替这些循环,大多数人并没有完全意识到这一点,而像我这样的人仍然掌握它。
-
有些事情不知道也没关系,这里有很多人愿意给出很好的提示。令我惊讶的是,尽管缺乏知识,但仍有几个问题要求以特定方式解决问题——比如使用 FOR 循环。 FOR 循环在 R 中并不常见,而且在许多情况下充其量是不必要的(顺便说一下,这与 dplyr 无关,它只是许多有用的包之一,而不是使用 FOR 循环作为起点的原因通常不是R 中的好主意。 FOR 循环在某些情况下可能很有用,但在 R 中这些是相当例外的)。
-
@RHertel 如果这些问题是同一个人一遍又一遍地问的问题,那我也会觉得很奇怪。
标签: r loops for-loop dataframe subset