【问题标题】:Selecting rows based on a value of a factor variable in a data.frame in a list根据列表中的 data.frame 中的因子变量的值选择行
【发布时间】:2016-05-26 21:12:05
【问题描述】:

我感觉我很亲密,但我无法让它发挥作用,我们将不胜感激。

我的目标是根据 1 个因子的值对列表中的数据进行子集化。 它是关于在不同时间点受到刺激的受试者的数据。现在我想对每个刺激的所有受试者的所有变量的数据进行子集化。 刺激的变量称为“刺激”。刺激具有例如“Happy 8”的名称。 所以示例路径:SubjList$Subject1$Stimulus["Happy 8"](虽然这也行不通。

我的数据框具有以下结构:

Subjdf 大列表(38 个元素)

每个元素都是一个 data.frame,包含大约 4000 个观察值(变化)和 26 个变量(包括“刺激”)

现在我可以通过执行以下操作在所有主题(元素)上设置一列的子集:

 ColSub <- (lapply(SubjList,'[[','Stimulus'))

但是当我尝试实现一个条件时它不起作用。

Happy8 <- (lapply(SubjList,'[[','Stimulus'=='Happy 8'))

没有简单的选择方法,例如:

Happy8 <- SubjList$Subject1$Stimulus["Happy 8", ]

所以,我有一种方法可以仅对符合条件 op“Stimulus”=="Happy 8" 的行进行子集化。并创建具有相同变量但只有 Stimulus Happy 8 的观察的相同主题列表。

提前谢谢你!

【问题讨论】:

  • 可重现的例子会有所帮助:stackoverflow.com/questions/5963269/…
  • 我试图重新创建问题,但通过示例您的答案有效。我不知道为什么,但主要区别是:1)我使用的数据是通过以下公式加载的:Subjdf

标签: r list subset


【解决方案1】:

这是你可以做的。数据框和列的名称不同:

DF1 <- data.frame(year = c(seq(2000,2012,by=1)), 
                    C = runif(13,0,1))
DF2 <- data.frame(year = c(seq(2000,2012,by=1)), 
                  C = runif(13,0,1))

DL <- list(DF1, DF2)

ColSub <- (lapply(DL, function(DF) {DF[DF$year >= 2005, "C"]}))
ColSub

这应该为您提供如何更改代码的想法。

【讨论】:

  • 感谢您的回答!我似乎没有让它在我的数据集中工作。 ColSubS
猜你喜欢
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多