我有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))])
答案 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))
请注意,此代码使用
而不是您的sev.scores
表,其中有列引用行和data.frame名称,我在上面创建的sev_scores
将包含最严重的实际数据每个患者ID的剧集。