首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将变量名指定为数据帧头

将变量名指定为数据帧头
EN

Stack Overflow用户
提问于 2017-11-05 18:51:33
回答 2查看 120关注 0票数 0

我有一个名为emp.data的数据帧,我需要将变量名指定为R中的数据帧头。

数据帧。

代码语言:javascript
复制
emp_id emp_name Domain salary start_date
      1     Rick    first  623.30 2012-01-01
      2 emp_name    second 515.20 2013-09-23
      3 Michelle    first  611.00 2014-11-15
      4     Ryan    Thired 729.00 2014-05-11
      5     Gary    First  843.25 2015-03-27

在这里,我将数据框列名域指定为empFirstName变量,并将变量名传递到下面的dplyr中以获取数据。

代码语言:javascript
复制
empFirstName<-"Domain"

library(dplyr)
library(tidyr)

df <- emp.data %>%
  gather(key, value, -c(emp_name, salary, empFirstName)) %>%
  group_by(emp_name, salary, empFirstName, key, value) %>%
  summarise(count = n()) %>%
  nest(key, value, count, .key = "finalValues")

但是我已经不再出错了。

FUN(X[i],...)中出错:找不到对象'empFirstName‘

代码语言:javascript
复制
structure(list(emp_id = 1:5, emp_name = c("Rick", "emp_name", 
"Michelle", "Ryan", "Gary"), Domain = c("first", "second", "first", 
"Thired", "First"), salary = c(623.3, 515.2, 611, 729, 843.25
), start_date = structure(c(15340, 15971, 16389, 16201, 16521
), class = "Date")), .Names = c("emp_id", "emp_name", "Domain", 
"salary", "start_date"), row.names = c(NA, -5L), class = "data.frame")
EN

回答 2

Stack Overflow用户

发布于 2017-11-05 21:22:56

我们可以结合使用sym!!来评估gather中的'empFirstName‘,也可以使用group_by_at

代码语言:javascript
复制
library(dplyr) #dplyr_0.7.4
library(tidyr) #tidyr_0.7.2
emp.data %>%
      gather(key, value, -c(emp_name, salary, !!rlang::sym(empFirstName)) ) %>%
      group_by_at(vars(emp_name, salary, empFirstName, key, value)) %>% 
      summarise(count = n()) %>%
      nest(key, value, count, .key = "finalValues")
# A tibble: 10 x 5
#   emp_name salary Domain        key      finalValues
#      <chr>  <dbl>  <chr>      <chr>           <list>
# 1 emp_name 515.20 second     emp_id <tibble [1 x 2]>
# 2 emp_name 515.20 second start_date <tibble [1 x 2]>
# 3     Gary 843.25  First     emp_id <tibble [1 x 2]>
# 4     Gary 843.25  First start_date <tibble [1 x 2]>
# 5 Michelle 611.00  first     emp_id <tibble [1 x 2]>
# 6 Michelle 611.00  first start_date <tibble [1 x 2]>
# 7     Rick 623.30  first     emp_id <tibble [1 x 2]>
# 8     Rick 623.30  first start_date <tibble [1 x 2]>
# 9     Ryan 729.00 Thired     emp_id <tibble [1 x 2]>
#10     Ryan 729.00 Thired start_date <tibble [1 x 2]>
票数 1
EN

Stack Overflow用户

发布于 2017-11-05 21:36:11

代码语言:javascript
复制
empFirstName <- quo(Domain)

emp.data %>%
  gather(key, value, -c("emp_name", "salary", !! empFirstName)) %>%
  group_by(emp_name, salary, !! empFirstName, key, value) %>%
  summarise(count = n()) %>%
  nest(key, value, count, .key = "finalValues")

# # A tibble: 10 x 5
#    emp_name salary Domain        key      finalValues
#       <chr>  <dbl>  <chr>      <chr>           <list>
#  1 emp_name 515.20 second     emp_id <tibble [1 x 2]>
#  2 emp_name 515.20 second start_date <tibble [1 x 2]>
#  3     Gary 843.25  First     emp_id <tibble [1 x 2]>
#  4     Gary 843.25  First start_date <tibble [1 x 2]>
#  5 Michelle 611.00  first     emp_id <tibble [1 x 2]>
#  6 Michelle 611.00  first start_date <tibble [1 x 2]>
#  7     Rick 623.30  first     emp_id <tibble [1 x 2]>
#  8     Rick 623.30  first start_date <tibble [1 x 2]>
#  9     Ryan 729.00 Thired     emp_id <tibble [1 x 2]>
# 10     Ryan 729.00 Thired start_date <tibble [1 x 2]>

使用上面给出的解决方案,您可以轻松创建如下所示的函数:

代码语言:javascript
复制
myfun <- function(data, empFirstName) {
empFirstName <- enquo(empFirstName)
data %>%
  gather(key, value, -c("emp_name", "salary", !! empFirstName)) %>%
  group_by(emp_name, salary, !! empFirstName, key, value) %>%
  summarise(count = n()) %>%
  nest(key, value, count, .key = "finalValues")
}

myfun(emp.data, Domain)

# # A tibble: 10 x 5
#    emp_name salary Domain        key      finalValues
#       <chr>  <dbl>  <chr>      <chr>           <list>
#  1 emp_name 515.20 second     emp_id <tibble [1 x 2]>
#  2 emp_name 515.20 second start_date <tibble [1 x 2]>
#  3     Gary 843.25  First     emp_id <tibble [1 x 2]>
#  4     Gary 843.25  First start_date <tibble [1 x 2]>
#  5 Michelle 611.00  first     emp_id <tibble [1 x 2]>
#  6 Michelle 611.00  first start_date <tibble [1 x 2]>
#  7     Rick 623.30  first     emp_id <tibble [1 x 2]>
#  8     Rick 623.30  first start_date <tibble [1 x 2]>
#  9     Ryan 729.00 Thired     emp_id <tibble [1 x 2]>
# 10     Ryan 729.00 Thired start_date <tibble [1 x 2]>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47120700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档