如何在R中将字符串作为列名传递

时间:2019-04-07 07:50:14

标签: r dataframe variables shiny

m ="jan"  
n = "5e"

r = paste0("jan","5e","_results")


"jan5e_results"

现在我要使用r的值并选择一个数据框,因为我有一个名称类似的数据框

jan5e_results
feb5e_results
mar5e_results
.
.
.

同样如何从这些数据框中选择列名?

例如

jan5e_results will have column name jan_var1
feb5e_results will have column name feb_var1
mar5e_results will have column name mar_var1
.
.
.

使用变量名如何选择数据框和列名之类的

m ="jan"  
n = "5e"
r = paste0("jan","5e","_results")
c = paste0(m,"var1")
r$c

我之所以这样问,是因为我试图制作一个闪亮的小实用程序来作为输入,并因此需要选择特定的数据框和特定的列。如果有更好的方法,请告诉我。

2 个答案:

答案 0 :(得分:2)

您还可以将所有数据框保存在列表中,然后像这样选择它们

col= paste0(m,"_var1")
dflist[[r]][col]

#  jan_var1
#1        1
#2        2
#3        3
#4        4
#5        5

该方法的优点是,您也可以动态创建数据框。我的意思是:通常,您实际上需要输入数据框名称来定义它们,例如使用

jan5e_results <- data.frame(jan_var1 = 1:5, b = 6:10)
# here you can not define jan5e_results without actually writing jan5e_results

但是使用列表,您可以简单地创建数据框,其名称要在这样的列表中提供

dflist[[r]] <- data.frame(matrix(rnorm(length(somevariable)), ncol= ncol(somedataframe)))

为了能够在此处复制整个代码,包括您问题中的变量

# deciding what elements to choose
r = paste0("jan","5e","_results")
m = "jan" 
col = paste0(m,"_var1")

# vector with dataframe names
dfnames = paste0(c("jan", "feb", "mar"), "5e", "_results")

# creating an empty list
dflist = vector("list", length(dfnames))
# naming the list
names(dflist) = dfnames

# save one of the dataframes to list
dflist[[r]] = data.frame(jan_var1 = 1:5, b = 6:10)

答案 1 :(得分:1)

我们可以使用get

col= paste0(m,"_var1")
get(r)[col]

#  jan_var1
#1        1
#2        2
#3        3
#4        4
#5        5

get(r)将返回名称为jan5e_results的整个数据框,并从中选择col列作为子集。

#  jan_var1  b
#1        1  6
#2        2  7
#3        3  8
#4        4  9
#5        5 10

数据

jan5e_results <- data.frame(jan_var1 = 1:5, b = 6:10)