【发布时间】:2015-10-19 14:49:22
【问题描述】:
我有以下问题: 我有一个包含两个部分和每个 4 个相同变量的列表(L1)。 变量 4 也是列表部分的名称。例如$a = a
a <- data.frame(V1=c("a","b","c"), V2=c(4,7,9), V3=1:3, V4=c("a","a","a"))
b <- data.frame(V1=c("d","e","f"), V2=c(10,14,16), V3=1:3, V4=c("b","b","b"))
L1 <- list(a=a, b=b)
L1
$a
V1 V2 V3 V4
a 4 1 a
b 7 2 a
c 9 3 a
$b
V1 V2 V3 V4
d 10 1 b
e 14 2 b
f 16 3 b
我想用 V3==2 提取列表每个部分的行。如果列表中没有具有此值的行,则应使用 NA 提取 V1 到 V3,并且 V4 应包含列表部分的名称。
在示例中,结果应如下所示:
V1 V2 V3 V4
b 7 2 a
e 14 2 b
如果我选择一个值,例如V3==4 那么我的结果应该是这样的:
V1 V2 V3 V4
<NA> <NA> <NA> a
<NA> <NA> <NA> b
我可以提取一列
unlist(lapply(L1, "[",3)) 但我不知道如何提取变量中具有特定值的行。
我还尝试将 lapply 与子集函数结合起来,但这对我不起作用。
感谢您的帮助!
【问题讨论】:
-
编写你自己的函数
foo,它接受一个data.framedf和一个V3的值(我们称之为v)。所以写foo(df, v)返回你想要的。然后,只需将其应用于列表:lapply(L1, FUN=foo, 3)。注意这里的3是作为foo的第二个参数传递的。