R中数据帧的子集和信息提取
我在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,
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)
作为结果,我如何使它在计算中忽略它?抱歉,由于语法错误太多,无法运行它