2

我创建了一个数据框并尝试访问数据框中的列。代码如下图

df <- data.frame(n = c('A','B','C'),
                 mark_1 = c(23,25, 17),
                 mark_2 = c(45,46,50))

j <- paste('mark',1,sep="_")
j

f <- '$'(df,j)
summary(f)

n <- '$'(df,"mark_1")
summary(n)

当我运行这段代码时,这就是我得到的

    > j <- paste('mark',1,sep="_")
    > j
    [1] "mark_1"
    > f <- '$'(df,j)
    > summary(f)
    Length  Class   Mode 
         0   NULL   NULL 
    > n <- '$'(df,"mark_1")
    > summary(n)
       Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      17.00   20.00   23.00   21.67   24.00   25.00 
    > 

为什么摘要(f)不起作用?j 正确连接到“mark_1”。那为什么会发生错误?

提前致谢

4

4 回答 4

6

@TylerRinker 向您展示了该怎么做。

...但是您不能使用的原因'$'(df,j)是美元运算符按字面意思使用第二个参数。

......所以'$'(df,mark_1)会很好。但是您根本无法将变量传递给它。这[就是[[

df[,j]  # The j'th column
df[[j]] # Pretend df is a list of columns and get the j'th element
于 2012-05-11T07:21:30.080 回答
5

在 as 上使用索引$

df[, j]
summary(df[, j])
于 2012-05-11T07:07:21.043 回答
4

'$'(df,j)相当于df$j-- 它查看参数的名称,而不是其值。您可以使用df[[j]]or df[,j]or'[['(df,j)代替(但要避免使用最后一个,除非您想让代码难以阅读)。

df$j <- 1

# The "j" column
df$j
`$`(df,j)
`[[`(df,"j")
df[["j"]]
df[,"j"]

# The "mark_1" column
df[[j]]
df[,j]
`[[`(df,j)
于 2012-05-11T07:23:10.210 回答
2

如果您将它与do.call. do.call在您将函数名称作为字符而不是语言值的情况下很有用。在这种情况下,它还评估第二个参数,即数据框列表和列名。

do.call('$', list(df, j))
[1] 23 25 17

也就是说,我认为你最好使用 '[[' 或 '[' 来评估第二个参数。

于 2012-05-11T11:24:30.197 回答