【发布时间】:2017-10-05 13:41:00
【问题描述】:
假设我有以下两个数据框:
col1 <- c("a","b","c","d","e")
col2 <- c("A","B","C","D","E")
col1a <- c("a","b","c","d","e")
col2a <- c("A","B","C","D","E")
df1 <- data.frame(col1, col2)
df2 <- data.frame(col1a, col2a)
colnames(df1) <- c("c1","c2")
colnames(df2) <- c("c1","c3")
我有以下功能来重命名列标题:
library(dplyr)
col_rename <- function(x) x %>% rename(new_c1 = c1, new_c2 = c2, new_c3 = c3)
当我运行这个函数时,我得到一个错误,因为函数中的列与数据框中的列不匹配。
df1 <- col_rename(df1)
Error: `c3` contains unknown variables
如何使函数仅在当前列上运行,而忽略不存在的列,而不删除或更改函数中指定的列名?
编辑:
我可以看到这个例子有点令人困惑。我有许多包含许多列的数据框。这些列由一些数据框共享,但不是全部。但是,我想重命名函数指定的所有列,而不管数据框中存在什么。它看起来像这样:
col1 <- c(1:5)
col2 <- c(1:5)
col3 <- c(1:5)
col4 <- c(1:5)
df1 <- data.frame(col1,col2,col3,col4)
df2 <- data.frame(col1,col2,col3,col4)
colnames(df1) <- c("c1","c2","c6","c8")
colnames(df2) <- c("c1","c3","c2","c8")
AB_rename <- function(x) x %>% rename(aa=col1,bb=col2,
cc=col3,dd=col4,
ee=col5,ff=col6,
gg=col7,hh=col8)
因此我不能效仿@Ycw 的例子,因为它们并不都遵循相同的重命名规则。如何让它忽略不存在的列?
【问题讨论】:
-
创建一个对象并将其作为参数传递
-
@Haakonkas 我已更新我的帖子以反映您的新问题。顺便说一句,在您发布原始问题后对其进行大量更改并不理想。请在下次发布之前完善您的问题。