R从列表中的数据帧内检索值

时间:2016-09-01 19:32:20

标签: r

我有一个包含多个数据框的列表:

weekday <- c("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")
data1 <- c(letters[1:7])
data2 <- c(letters[8:14])

df1 <- data.frame(day = weekday, val = data1)
df2 <- data.frame(day = weekday, val = data2)

my_list <- list(list_1 = df1, list_2 = df2)

我试图找出如何在特定数据框中提取与特定日期相匹配的数据。我知道如何提取数据框list_1

> my_list[["list_1"]]
  day val
1 Sun   a
2 Mon   b
3 Tue   c
4 Wed   d
5 Thu   e
6 Fri   f
7 Sat   g

当我知道当天的索引时,如何提取特定行:

> my_list[["list_1"]][1,]
  day val
1 Sun   a

但我不能为我的生活找出当我想要匹配一个值时如何获得特定的行。我认为应该起作用的一个例子是:

my_list[["list_1"]][list_1$day == "Sun",]

但是我收到了错误:

Error in `[.data.frame`(my_list[["list_1"]], list_1$day == "Sun", ) : 
  object 'list_1' not found

我知道我可以将df子集化为一个临时变量,然后就很容易了,我只是试图使这个紧凑并遵循良好的做法。

2 个答案:

答案 0 :(得分:2)

如果您想保存一些输入内容,可以使用subset中的filterdplyr

subset(my_list[["list_1"]], day == "Sun")
#   day val
# 1 Sun   a

答案 1 :(得分:1)

试试my_list$list_1$day == "Sun"。您的my_list本质上是一个嵌套列表(因为数据框也是一个列表),因此您可以链接$运算符以一直到列。所以你的代码可能是

my_list$list_1[my_list$list_1$day == "Sun", ]

如您所见,该代码并非易读。出于这个原因,我喜欢with()。这很方便,因为列表可以强制转换为环境,而且阅读起来容易得多。

with(my_list, list_1[list_1$day == "Sun", ])