【问题标题】:subset and extract information from data frames in R子集并从R中的数据帧中提取信息
【发布时间】:2021-01-23 18:33:01
【问题描述】:

我在 R 中有一个名为 data 的裸数据集,其中包含 n 个变量,即 X1,X2,...,Xn。在我的代码的某个时刻,我从另一个过程中找到了一个名为 subs 的子集,它给出了以下输出

        X1       X7       X8       X9      X11     
1    440.8065 466.9053 60.03588 374.8059 167.2424  

请注意,Xi 值与 data 中的值不同,每个 Xi 都是标题,而不是 R 中的一行。 对于每个Xi,都保存在名为VarXi(例如VarX1, VarX2,..., VarXn)的环境数据帧中

      variable   coefficient
1  (Intercept) -2.111150e+03
2           X3  2.797371e-05
3           X5  5.653977e-01
4           X6  5.660470e+00
5           X7  1.003460e+01
6           X8  2.403519e+01
7          X10  3.931899e-01
8          X12  2.062661e+00
9          X13  5.430814e+00
10         X14  2.433546e-01

我想首先创建一个新的数据集newdata,它只包含subs 中显示的变量,其次(也是最重要的)只为subs 中显示的那些VarXi 仅打印@987654336 @ 和第一列的对应变量,例如基于上面的例子

  variable   coefficient

1      X6    5.660470

我如何在 R 中做这些事情?

【问题讨论】:

  • "环境中保存有名为sVarXi(如sVarX1sVarX2,...,sVarXn)的这种形式的数据框" 这个非常可怕。如果您改用数据框列表,您的生活会更轻松。 See my answer here 了解详细信息和示例。
  • 感谢您的贡献,我将它们列在一个列表中,但最后我想要其中一些与其他的分开。
  • 未来不太可能对任何人有用

标签: r subset lapply


【解决方案1】:

如果没有可重现的例子,很难说,但这是我对你的最佳猜测:

# get a list of the "sVarXi" data frames:
svar_list = mget(ls(pattern = "svarX[0-9]+"))

# narrow down to just the ones in subs
svar_list_in_subs = svar_list[paste0("sVar", names(subs))]

# extract maximum row
max_coeffs = lapply(svar_list_in_subs, function(x) {
  x = x[x$variable != "(Intercept)", ]
  x[which.max(abs(x$coefficient)), ]
})

我在这里单独保存svar_list_in_subs 只是为了让步骤清晰 - 但它是重复的和不必要的。获得sVar 列表后,您可以直接跳转到:

max_coeffs_in_subs = lapply(svar_list[paste0("sVar", names(subs))], function(x) {
  x = x[x$variable != "(Intercept)", ]
  x[which.max(abs(x$coefficient)), ]
})

【讨论】:

  • 显示如下Error in abs(x$coefficient) : non-numeric argument to mathematical function
  • 这可能有几个原因 - 如果您尝试获取因子列或不存在列的绝对值,则会出现该错误。也许您的coefficient 列之一不是数字?或者[也许mget 选择了一个没有coefficient 列的数据框?或者names(subs) 可能包含一个不存在或没有进入svar_list 的数据框的名称?嗯,也许我们需要将“sVar”粘贴到subs 的名称上?我会进行编辑,但如果您需要更多调试帮助,如果没有可重现的示例,我将无能为力。
  • 您还应该能够检查中间结果并确保它们看起来正确。比如,如果svar_list 有东西,但svar_list_in_subs 没有,那么这就是问题所在。
  • 我想我找到了问题所在,在所有情况下max_coeffs 返回(Intercept) 作为结果,我怎样才能让它在计算中忽略它?
  • 抱歉,语法错误太多,无法运行
猜你喜欢
  • 2021-08-14
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 2017-12-24
相关资源
最近更新 更多