我有一个包含多个数据框的列表:
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子集化为一个临时变量,然后就很容易了,我只是试图使这个紧凑并遵循良好的做法。
答案 0 :(得分:2)
如果您想保存一些输入内容,可以使用subset
中的filter
或dplyr
:
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", ])