如何用for循环按年份筛选数据集并检测重复项
问题原因
原代码用年份数值(2018/2019/2020)作为列表的位置索引,R列表的位置索引从1开始计数,这会强制创建一个包含2020个元素的列表,前2017个位置都是空值,仅在第2018、2019、2020位存储了有效结果,因此出现大量空值的异常输出。
修正方案
我们需要将年份作为列表的命名元素而非位置索引,或者用循环的位置序号填充列表后再命名元素,以下是两种可行写法:
方法1:直接用年份字符串作为列表元素名
library(dplyr) mylist <- list() for(i in 2018:2020){ temp <- mydata %>% filter(annee == i) # 将年份转为字符串作为列表元素的名称 mylist[[as.character(i)]] <- table(duplicated(temp)) }
方法2:先初始化列表再填充并命名
library(dplyr) years <- 2018:2020 # 初始化对应长度的空列表 mylist <- vector("list", length(years)) # 给列表元素命名为年份 names(mylist) <- years for(j in seq_along(years)){ i <- years[j] temp <- mydata %>% filter(annee == i) mylist[[j]] <- table(duplicated(temp)) }
验证结果
运行修正后的代码,会得到符合预期的输出:
$`2018` FALSE TRUE 9 1 $`2019` FALSE 10 $`2020` FALSE TRUE 9 1
内容的提问来源于stack exchange,提问作者Seydou GORO
相关产品推荐
相关产品推荐

