【问题标题】:How can I use randomly selected variables as R dataframe columns?如何使用随机选择的变量作为 R 数据框列?
【发布时间】:2022-01-17 06:54:48
【问题描述】:

我希望从 df 中随机选择变量集并在函数中使用它们。 列名标识了 n 个变量集(比如 n=3),比如 A 和 B。所以列名是 A.1、A.2、…An、B.1、B.2、…Bn 等。我随机选择 1 到 n 之间的数字来确定要选择的变量集。我粘贴了例如“A”。到随机数,得到一个向量V,由标识列的字符变量组成,例如“A.3”、“A.1”等。现在我想使用与列名对应的值。

df <- data.frame(matrix(c(1,5,7,4,3,8,2,9,5,5,7,4), 2, 6, 
    dimnames =list(NULL, c('A.1', 'A.2', 'A.3', 'B.1', 'B.2', 'B.3'))))

>df
A.1 A.2 A.3 B.1 B.2 B.3
1   7   3   2   5   7
5   4   8   9   5   4

rando <- c(1,3) # "random" numbers

VA <- paste('A.', rando, sep="")   # A variable names
VB <- paste('B.', rando, sep="")   # B variable names

我想要一个看起来像这样的数据框,即,其值来自与随机选择的数字相对应的列:

A    B
1    2
8    4

我可以像这样得到表格的第一个元素:df[1, VA[1]],但我想知道如何有效地生成这个表格

【问题讨论】:

  • 试试df %&gt;% select(all_of(c(VA, VB))) %&gt;% pivot_longer(cols = everything(), names_to = ".value", names_pattern = "([A-Z])\\..*") %&gt;% slice_sample(n = 2) 或者它可以。成为%&gt;% slice(rando)
  • df[cbind(c(seq_along(VA), seq_along(VB)), match(c(VA, VB), colnames(df)))]

标签: r dataframe


【解决方案1】:

r2Evans 的评论解决了我的问题:

ans <- df[cbind(c(seq_along(VA), seq_along(VB)), match(c(VA, VB), colnames(df)))]

然后我可以将其放入所需的格式

matrix(ans, nrow(df), ncol(df), dimnames=list(NULL, c('VA','VB')))

【讨论】:

    猜你喜欢
    • 2022-09-30
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    相关资源
    最近更新 更多