【发布时间】:2020-05-05 15:32:43
【问题描述】:
我有以下数据集:
dat<-structure(list(X1979 = c(1.26884, 0.75802, 0.35127, -0.0679517,
-4.34841, -0.312289, -5.02931, -2.49339, -12.9065, -2.90853,
-1.02833, 0.333109, 1.70236, -2.44456, -1.83307, -0.982637, -2.14197,
-4.1294, -3.98545, -6.26205, -5.56162, 0.0789091, 1.63146, -0.214938
), X1980 = c(-1.32651, -0.0199441, -1.08583, 3.25939, 0.0402712,
-3.22174, -0.859756, -3.30898, 1.0128, 0.847161, 2.75866, 1.93117,
1.05851, 1.83372, -0.811736, -0.992584, -0.110012, 0.132343,
2.21745, -1.48902, 0.111302, -3.77058, -3.65044, -2.41263)), class =
"data.frame", row.names = 50:73)
我想在上述数据的每列中应用以下函数:
library(dplyr)
library(tibble)
library(zoo)
test <- function(x){
dat %>%
rownames_to_column() %>%
filter(V1 > 0 &
rollsum(V1 > 0, 4, fill = NA, align =
"left") >= 3 &
rollsum(V1, 4, fill = NA, align =
"left") > 1) %>%
return(slice(1))
}
test(dat)
我遇到了一个错误,提示在数据中找不到 V1。所以我的问题是如何更正此函数,以便它可以读取列中的值而不管标题名称如何?
我将不胜感激。
【问题讨论】:
-
这能回答你的问题吗? Programming with dplyr using string as input
-
我猜你需要
!!sym或最近{{}}。但是,如果您想在一个数据集上执行此操作,是否需要一个函数(考虑到名称是从内部获取的)? -
在
dat数据框中你的列名是X1979和X1980,如果你想指定列选择,请尝试改变它并使用上面提到的NSE -
@NelsonGon 我不确定我是否理解正确,你的意思是 !!V1?对于我正在应用的整个数据,列名是 X1979...X2019。