我正在尝试创建一个带两个参数的函数。一个参数是数据框的名称,第二个参数是该数据框中的列的名称。目标是使函数根据指定列中包含的信息操作整个框架中的数据。
我的问题是我无法弄清楚如何使用输入第二个参数的字符表达式来访问函数内数据框中的特定列。这是一个非常简短的例子,
datFunc <- function(dataFrame = NULL, charExpres = NULL) {
return(dataFrame$charExpress)
}
例如,如果您输入
datFunc(myData, "variable1")
这不会返回myData $ variable1。有一个简单的方法来做到这一点。对不起,如果这个问题很愚蠢,但我很感激这里的帮助。
一个相关的问题是,如何使用字符串“myData $ variable1”从myData实际返回variable1?
答案 0 :(得分:2)
你几乎就在那里,尝试使用[
代替$
进行此类索引
datFunc <- function(dataFrame = NULL, charExpres = NULL, drop=TRUE) {
return(dataFrame[, charExpres, drop=drop])
}
# An example
set.seed(1)
myData <- data.frame(ID=1:10, variable1=rnorm(10, 10, 1)) # DataFrame
datFunc(myData, "variable1") # dropping dimensions
[1] 9.373546 10.183643 9.164371 11.595281 10.329508 9.179532 10.487429 10.738325 10.575781 9.694612
datFunc(myData, "variable1", drop=FALSE) # keeping dimensions
variable1
1 9.373546
2 10.183643
3 9.164371
4 11.595281
5 10.329508
6 9.179532
7 10.487429
8 10.738325
9 10.575781
10 9.694612
答案 1 :(得分:2)
我认为OP也希望将数据帧的名称作为字符串传递。如果是这种情况,你的功能应该是这样的。 (从其他答案借来的样本)
fooFunc <- function( dfNameStr, colNamestr, drop=TRUE) {
df <- get(dfNameStr)
return(df[,colNamestr, drop=drop])
}
> myData <- data.frame(ID=1:10, variable1=rnorm(10, 10, 1))
> myData
ID variable1
1 1 10.838590
2 2 9.596791
3 3 10.158037
4 4 9.816136
5 5 10.388900
6 6 10.873294
7 7 9.178112
8 8 10.828505
9 9 9.113271
10 10 10.345151
> fooFunc('myData', 'ID', drop=F)
ID
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
> fooFunc('myData', 'ID', drop=T)
[1] 1 2 3 4 5 6 7 8 9 10
答案 2 :(得分:0)
或者,您可以找到数据框的列索引:
df <- as.data.frame(matrix(rnorm(100), ncol = 10))
colnames(df) <- sample(LETTERS, 10)
column.index.of.A <- grep("^A$", colnames(df))
df[, column.index.of.A]