R 根据用户输入的列名在数据帧上执行任何任务

R 根据用户输入的列名在数据帧上执行任何任务,r,dataframe,R,Dataframe,系统处理提取作为输入的data.frame的所有列名,用户可以从输入数据集中选择任意一个变量。考虑到mtcars数据集,如果将其作为输入,用户可以从其列中选择,这些列被提取为: #to get all the column names and type colNamesTypes<- as.data.frame(sapply(mtcars, typeof)) colNamesTypes<-cbind(Variable=rownames(colNamesTypes),colNamesT

系统处理提取作为输入的data.frame的所有列名,用户可以从输入数据集中选择任意一个变量。考虑到
mtcars
数据集,如果将其作为输入,用户可以从其列中选择,这些列被提取为:

#to get all the column names and type
colNamesTypes<- as.data.frame(sapply(mtcars, typeof))
colNamesTypes<-cbind(Variable=rownames(colNamesTypes),colNamesTypes)
colnames(colNamesTypes)<-c("Variable","Type")
rownames(colNamesTypes)<-NULL
(为了方便起见,我将mtcars的行名转换为正确的列-
carnames

假设用户选择,
mpg
hp
并希望找到这两个变量的总和。我们可以通过以下方式进行:

UserVar1 <- "mpg"
UserVar2 <- "hp"
summary1 = group_by(mtcars,mpg,hp)
summary1 = summarise(summary1, 
                      Sum_mpg = sum(mpg),
                      Sum_hp = sum(hp))
UserVar1
v1
v2
函数为
组中的向量指定的名称

unlist(mtcars[UserVar1])
给你一个向量

summary1 = summarise(summary1, 
                      Sum_mpg = sum(summary1[,UserVar1]),
                      Sum_hp = sum(summary1[,UserVar2]))
提供与提供不带引号的列名相同的输出

不过,我更喜欢这种管道方法:

mtcars %>% 
  group_by(mpg,hp) %>% 
  summarise(Sum_mpg = sum(.[,UserVar1]),
            Sum_hp = sum(.[,UserVar2]))->summary1

那么,我如何通过它
summary1=groupby(mtcars,unlist(mtcars[UserVar1]),unlist(mtcars[UserVar2])
summary1=summary(summary1,Sum\u mpg=Sum(mtcars[UserVar1]),Sum\u hp=Sum(mtcars[UserVar1]),
但这并没有给我与
summary1=summary(summary1,Sum\u mpg=Sum(mpg),Sum\u hp=Sum(hp))
。但是,我无法在
group_by(mtcars,mtcars[,UserVar1],mtcars[,UserVar2)]
上获得正确的结果。该语句实际上将一个新列添加到原始数据帧中,而我随后的
summary()
语句并没有给我正确的输出。。
summary1 = summarise(summary1, 
                      Sum_mpg = sum(summary1[,UserVar1]),
                      Sum_hp = sum(summary1[,UserVar2]))
mtcars %>% 
  group_by(mpg,hp) %>% 
  summarise(Sum_mpg = sum(.[,UserVar1]),
            Sum_hp = sum(.[,UserVar2]))->summary1