如何编写一个简单的函数来组合所有这些相似的代码?

时间:2019-10-01 20:25:27

标签: r lapply

原始数据中需要清除数百列。它们的每个部分都具有相似的结构。为了进行分析,我需要将所有部分合并为一个具有相同名称的部分。

但是,我真的不知道如何同时使用变量和字符。我应该用!! ?

Q14_1 <- Q14 %>% select(province, ends_with("open_1"))
colnames(Q14_1) <- c("province", paste0("A", 1:11))

Q14_2 <- Q14 %>% select(province, ends_with("open_2"))
colnames(Q14_2) <- c("province", paste0("A", 1:11))

Q14_3 <- Q14 %>% select(province, ends_with("open_3"))
colnames(Q14_3) <- c("province", paste0("A", 1:11))

Q14_4 <- Q14 %>% select(province, ends_with("open_4"))
colnames(Q14_4) <- c("province", paste0("A", 1:11))

Q14_bind <-bind_rows(Q14_1, Q14_2, Q14_3, Q14_4)

有没有简单的方法可以解决此问题?

感谢帕菲特博士。

他的代码有效!

df_list <- lapply(paste0("open_", 1:20), function(i) 
  setNames(select(Q14, province, ends_with(i)), 
           c("province", paste0("A", 1:11)))
)

df_list%>%bind_rows()

1 个答案:

答案 0 :(得分:1)

考虑lapply最终为bind_rows构建数据帧列表,并使用setNames作为colnames()<-的右侧版本:

df_list <- lapply(paste0("open_", 1:4), function(i) 
                       setNames(select(Q14, province, ends_with(i)), 
                                c("province", paste0("A", 1:11)))
           )

Q14_bind <- bind_rows(df_list)