[英]Loop in tidyverse
我正在学习tidyverse()
并且我正在使用时间序列数据集,并且我选择了以sec
开头的列。 我想基本上从等于 123 的列中识别这些值,保留这些值并将 rest 替换为 0。但我不知道如何从sec1:sec4
循环。 另外我怎样才能sum()
每列?
df1<-df %>%
select(starts_with("sec")) %>%
select(ifelse("sec1:sec4"==123, 1, 0))
样本数据:
structure(list(sec1 = c(1, 123, 1), sec2 = c(123, 1, 1), sec3 = c(123,
0, 0), sec4 = c(1, 123, 1)), spec = structure(list(cols = list(
sec1 = structure(list(), class = c("collector_double", "collector"
)), sec2 = structure(list(), class = c("collector_double",
"collector")), sec3 = structure(list(), class = c("collector_double",
"collector")), sec4 = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), delim = ","), class = "col_spec"), row.names = c(NA,
-3L), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"))
我认为您必须使用 mutate 和 cross 来完成此操作。 在下面,您将从 sec 开始在每一列中发生变异,然后保留所有 123 的值并将所有其他值替换为 0。
df1<-df %>%
select(starts_with("sec")) %>%
mutate(across(starts_with("sec"),.fns = function(x){ifelse(x == 123,x,0)}))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.