R提供了两种不同的方法来访问列表或data.frame- []和[[]]运算符的元素.
两者有什么区别?在什么情况下我应该使用一个而不是另一个?
我希望根据不同的列来订购数据框,一个转弯.我有一个字符向量,其中的相关列名order应该基于:
parameter <- c("market_value_LOCAL", "ep", "book_price", "sales_price", "dividend_yield",
"beta", "TOTAL_RATING_SCORE", "ENVIRONMENT", "SOCIAL", "GOVERNANCE")
Run Code Online (Sandbox Code Playgroud)
我想循环遍历名称parameter并动态选择要用于order我的数据的列:
Q1_R1000_parameter <- Q1_R1000[order(Q1_R1000$parameter[X]), ]
Run Code Online (Sandbox Code Playgroud)
这里X是1:10(因为我有10个项目parameter).
为了使我的示例可重现,请考虑mtcars存储在字符向量中的数据集和一些变量名称cols.当我尝试mtcars使用动态子集选择变量时cols,以与上面(Q1_R1000$parameter[X])相似的方式,未选择该列:
cols <- c("cyl", "am")
mtcars$cols[1]
# NULL
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码
a = "col1"
b = "col2"
d = data.frame(a=c(1,2,3),b=c(4,5,6))
Run Code Online (Sandbox Code Playgroud)
此代码生成以下数据框
a b
1 1 4
2 2 5
3 3 6
Run Code Online (Sandbox Code Playgroud)
但是,所需的数据框是
col1 col2
1 1 4
2 2 5
3 3 6
Run Code Online (Sandbox Code Playgroud)
此外,我希望能够做到像d$a那么这将抢d$col1自a = "col1"
如何判断R "a"是变量而不是列的名称?
我有一个 R 列表,如下所示
> str(prices)
List of 4
$ ID : int 102894616
$ delay: int 8
$ 47973 :List of 12
..$ id : int 47973
..$ index : int 2
..$ matched: num 5817
$ 47972 :List of 12
..
Run Code Online (Sandbox Code Playgroud)
显然,我可以通过例如prices$"47973"$id 访问任何元素。
但是,我如何编写一个参数化对该列表的访问的函数?例如带有签名的访问函数:
access <- function(index1, index2) { .. }
Run Code Online (Sandbox Code Playgroud)
可以如下使用:
> access("47973", "matched")
5817
Run Code Online (Sandbox Code Playgroud)
这看起来很微不足道,但我无法编写这样的函数。感谢您的指点。