R 动态确定数据帧列是否存在,如果存在则进行变异
我有基于客户机名称从数据库中提取和处理数据的代码。有些客户端可能有不包含特定列名的数据,例如,R 动态确定数据帧列是否存在,如果存在则进行变异,r,dplyr,R,Dplyr,我有基于客户机名称从数据库中提取和处理数据的代码。有些客户端可能有不包含特定列名的数据,例如,last\u name或first\u name。对于不使用姓或名的客户,我不在乎。对于使用这两个字段中任何一个的客户机,我需要mutate()那些带有toupper()的列,以便我可以在ETL过程中稍后加入这些标准化字段 现在,我正在使用一系列if()语句和一些辅助函数来查找数据帧的名称,然后在它们存在时进行变异 但这是处理这类任务的最佳方式吗?动态查看数据帧中是否存在列名,如果存在,则对其进行变异?
last\u name
或first\u name
。对于不使用姓
或名
的客户,我不在乎。对于使用这两个字段中任何一个的客户机,我需要mutate()
那些带有toupper()
的列,以便我可以在ETL过程中稍后加入这些标准化字段
现在,我正在使用一系列if()
语句和一些辅助函数来查找数据帧的名称,然后在它们存在时进行变异
但这是处理这类任务的最佳方式吗?动态查看数据帧中是否存在列名,如果存在,则对其进行变异?在这个函数中必须有多个
if()
语句,这似乎很奇怪是否有更精简的方法来处理这些数据?您可以使用mutate\u at
和中的一个,两者都来自dplyr
。只有当该列与c(“名字”、“姓氏”)中的一个匹配时,该列才会发生变化。如果不匹配,它将生成一个简单的警告,但您可以忽略或抑制它
library(dplyr)
d %>%
mutate_at(vars(one_of(c("first_name", "last_name")), toupper)
id col_name last_name
1 19 7461 V
2 52 9651 H
3 56 1901 P
4 13 7866 Z
5 25 9527 U
# example with no match
b %>%
mutate_at(vars(one_of(c("first_name", "last_name"))), toupper)
id col_name another_col
1 34 9315 8686
2 26 5598 4124
3 17 3318 2182
4 32 1418 4369
5 49 4759 6680
Warning message:
Unknown variables: `first_name`, `last_name`
下面是一组其他的?在dplyr
-
这些函数允许您根据变量的名称选择变量
以()开头:以前缀开头
以()结束:以前缀结束
contains():包含文本字符串
matches():匹配正则表达式
num_range():一个数字范围,如x01、x02、x03
():字符向量中的变量之一
everything():所有变量
> b %>% mutate_first_last()
id col_name another_col
1 48 8318 6207
2 39 7155 7170
3 16 4486 4321
4 55 2521 8024
5 15 1412 4875
> d %>% mutate_first_last()
id col_name last_name
1 64 7438 A
2 43 4551 Q
3 48 7401 K
4 78 3682 Z
5 87 2554 J
library(dplyr)
d %>%
mutate_at(vars(one_of(c("first_name", "last_name")), toupper)
id col_name last_name
1 19 7461 V
2 52 9651 H
3 56 1901 P
4 13 7866 Z
5 25 9527 U
# example with no match
b %>%
mutate_at(vars(one_of(c("first_name", "last_name"))), toupper)
id col_name another_col
1 34 9315 8686
2 26 5598 4124
3 17 3318 2182
4 32 1418 4369
5 49 4759 6680
Warning message:
Unknown variables: `first_name`, `last_name`