使用存储在另一个数据框中的值查找数据框

时间:2017-07-10 11:19:39

标签: r list dataframe

我有15个数据框,其中包含一组患者的患者就诊信息。以下示例。它们被命名为FA.OFC1,FA.OFC2等。

ID       sex   date        age.yrs   important.var   etc...
xx_111   F     xx.xx.xxxx  x.x       x

我正在生成摘要数据框(sev.scores),其中包含患者对所有记录数据的最严重情节的信息。我已成功使用which.max功能获取最严重的剧集,但现在需要有关该特定剧集的其他信息。

我重新创建了数据框的名称,我需要通过在最大返回后粘贴信息来查找其他信息:

max        data frame
8          df2

具体来说,names()函数为我提供了最严重事件列的名称(在摘要数据框sev.scores中,它还提供了有关要查找的数据框的信息:

sev.scores[52:53] <- as.data.frame(cbind(row.names(sev.scores[c(5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50)]),apply(sev.scores[c(5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50)],1,function(x) names(sev.scores[c(5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50)])[which(x==max(x))])))

但是现在我想弄清楚如何告诉R获取存储在列中的数据帧名称,并在第5列中搜索该数据帧的条目。

因此,在上面的示例中,有关最严重情节的信息存储在数据框2(df2)中,我需要从第5条记录(important.var)获取信息并将其返回到此摘要数据框。

更新

我现在已将这些dfs存储在列表中,但仍然无法获取我想要的信息。

我找到了以下用于从列表中获取最大值的示例

lapply(L1, function(x) x[which.max(abs(x))])

如何根据列表中所有元素中存在的因素对其进行调整?

e.g。类似的东西:

lapply(my_dfs[[all elements]]["factor of interest"], function(x) x[which.max(abs(x))])

1 个答案:

答案 0 :(得分:1)

如果我可以建议一种根本不同的方法:将所有data.frames连接到 one rbind),并添加一个描述原始数据性质的单独列。 。为此,有必要知道原始数据框架在哪些方面有所不同(例如疾病类型;因为我不知道你的数据,所以我们坚持这个例子)。

此外,您需要确保您的数据位于tidy data format。这是一个很容易满足的要求,因为your data should be in this format anyway

然后,一旦您拥有单个data.frame中的所有数据,您只需为每种疾病类型选择最严重的情节,即可轻松创建摘要:

sev_scores = all_data %>%
    group_by(ID) %>%
    filter(row_number() == which.max(FactorOfInterest))

请注意,此代码使用包。您可以使用不同的包(例如)或基本R函数执行等效分析,但我强烈建议使用dplyr:The resulting code is generally easier to understand.

而不是您的sev.scores表,其中有列引用行和data.frame名称,我在上面创建的sev_scores将包含最严重的实际数据每个患者ID的剧集。