我有一个像下面这样的数据框:
df <- data.frame(v1 = c("A", "B", "A", "A", "B", "B", "B", "B", "A", "A", "A", "A"),
v2 = c("X", "Y", "X", "Y", "Z", "X", "X", "Y", "X", "Y", "Z", "Z"),
v3 = c(2, 1, 3, 1, 1, 2, 1, 2, 1, 2, 2, 1))
在此数据帧v1和v2中,所谓的分组变量(在这种情况下为字符向量),我想使用一个或多个基本R函数对计数器变量v3进行升序排序。不需要对分组变量进行排序的顺序(升序和降序都可以)。现在,在这种特殊情况下,这很容易:
df <- df[order(df$v1, df$v2, df$v3),]
或者:
df <- df[do.call(what = order, args = df),]
我想要的是对具有n个分组变量的任何数据帧的更通用解决方案,这些变量的名称包含在向量中,而计数器变量的名称包含在另一个向量中。我想要这样做的原因是,该数据是在用户定义函数的函数调用中给出的,因此可以变化。
grouping_vars <- c("v1", "v2", ..., "vn") #not actual code. Data frame contains *n* variables.
counter <- "vi" #not actual code. One of them, the i-th, is the counter variable.
再次,我想利用一个基础R函数的这里(最有可能order
)和不溶液从data.frame
或tidyverse
来自实施例。
您的代码几乎在那里。只需[]
在后面使用df
即可提取分组和数字列以进行排序。
df[do.call(what = order, args = df[,c(grouping_vars, counter)]), ]
PeterD:我在向量前面添加了一个逗号,其中包含选定的列,以明确说明数据框的列的选择df
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句