R中数据帧的子集和信息提取

R中数据帧的子集和信息提取,r,subset,lapply,R,Subset,Lapply,我在R中有一个名为data的数据集,它有n个变量,即X1,X2,…,Xn。在我的代码的某个地方,我从另一个过程中找到了一个名为subs的子集,它给出了以下输出 X1 X7 X8 X9 X11 1 440.8065 466.9053 60.03588 374.8059 167.2424 注意,席数值与数据< /代码>不相同,每个席是头,而不是R中的行。 对于这些Xi中的每一个VarXi(例如VarX1,VarX2,

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

        X1       X7       X8       X9      X11     
1    440.8065 466.9053 60.03588 374.8059 167.2424  
<>注意,席数值与<代码>数据< /代码>不相同,每个<代码>席<代码>是头,而不是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
只打印
abs(最大系数)
和第一列的相应变量,例如,基于上述示例

  variable   coefficient

1      X6    5.660470

在R中如何做这些事情?

如果没有可复制的示例,很难说,但这是我最好的猜测:

# 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\u list\u单独保存在_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)), ]
})

“在环境中保存了名为
sVarXi
(例如
sVarX1
sVarX2
,…,
sVarXn
)的数据帧,这种形式”这非常可怕。如果使用数据帧列表,您的生活会更轻松。详细信息和示例。感谢您的贡献,我将它们列在一个列表中,但最终我希望其中一些与其他部分分开。不太可能对未来的任何人有用它在abs中显示以下
错误(x$系数):数学函数的非数值参数
,这可能有几个原因-如果尝试获取因子列或不存在列的绝对值,则会出现该错误。也许您的
系数
列中有一列不是数字?或者[可能是
mget
拾取了一个没有
系数列的数据帧?或者
名称(subs)
包含了一个不存在或未进入
svar\u列表的数据帧的名称?嗯,可能我们需要粘贴“svar”关于
subs
?我会进行编辑,但是如果你需要更多的调试帮助,没有一个可复制的示例我就做不了什么。你还应该能够检查中间结果,确保它们看起来正确。比如,如果
svar\u list
有东西,但是
svar\u list\u in\u subs
没有,那么问题就出在这里是。我想我找到了问题所在,在所有情况下,
max_coefs
返回
(Intercept)
作为结果,我如何使它在计算中忽略它?抱歉,由于语法错误太多,无法运行它