R语言:如何通过变量引用数据框的指定列?
解决R中通过变量引用数据框列的问题
嘿,你碰到的这个情况太常见了!先直接说结论:你用df$sa[1]确实是错误的,原因是R里的$运算符是直接匹配字面列名的——它不会把sa当成一个变量去解析,反而会去你的数据框df里找一列名叫sa的列,而你的df里根本没有这一列,所以结果要么是NULL要么是NA,自然拿不到ColA的元素。
下面给你几个正确的实现方法,按需选用:
1. 用方括号[[ ]]索引(推荐取单个列的场景)
这是R里通过变量引用列最直接的方式,双括号会把变量解析成列名,返回的是该列的向量:
# 获取sa中第一个列名对应的列向量 df[[sa[1]]] # 输出:[1] "A" "D" "D" # 取该列的第一个元素 df[[sa[1]]][1] # 输出:[1] "A"
2. 用单括号[ ]索引(适合取多列或保留数据框结构)
如果你想保留数据框的结构,或者一次性取多个列,可以用单括号:
# 取sa中第一个列名对应的列(返回数据框) df[, sa[1]] # 输出: # ColA # 1 A # 2 D # 3 D # 一次性取sa中的所有列 df[sa] # 输出: # ColA ColB # 1 A B # 2 D B # 3 D A
3. 如果你用tidyverse(dplyr)的话
要是你平时习惯用dplyr操作数据,可以用.data代词或者all_of()函数来解析变量:
library(dplyr) # 提取单个列作为向量 pull(df, .data[[sa[1]]]) # 选择多个列 select(df, all_of(sa))
简单总结一下:当你需要用变量来指代列名时,别用$,改用[[ ]]或[ ],或者tidyverse里的对应方法就可以解决问题啦!
内容的提问来源于stack exchange,提问作者Dev P
相关产品推荐
相关产品推荐

