根据条件从数据帧列表中提取数据帧的子列表
extract sublist of dataframes from list of dataframes based on condition
我有一个很大的数据框列表,我想创建包含满足条件的数据框的子列表。列表中的每个数据框都有相同的列名,它们都有一个名为 treatment 的列,其中包含单词 ZEO 或 BLEO。我希望能够编写一个函数或一个单行代码,使我能够提取所有具有 "ZEO" 的数据帧。 (请注意,一个数据帧中只有一种处理,因此 ListofData$dataframe1$treatment 的所有行都等于 ZEO),列表很大(~300 个数据帧),我还有其他变量我希望能够提取。到目前为止,我尝试了这些方法,但它们似乎没有用
cond<- sapply(ListofData, function(x) x$treatment == "ZEO")
test <- ListofData[(cond)]
数据帧的名称也包含有关处理的信息,这就是我尝试这个的原因,但它returns一个空列表
test<-ListofData[grep('^[Zeo]+',ListofData)]
你能帮我想办法提取我需要的数据帧吗?
使用正则表达式的解决方案应该可行,请参阅此示例:
#example data
ListofData <- list(ZEO1 = data.frame(xx = 1, treatment = "ZEO"),
xx1 = data.frame(xx = 2, treatment = "xx"),
ZEO2= data.frame(xx = 3, treatment = "ZEO"))
#using regex
res <- ListofData[ grepl("^[Zeo]+", names(ListofData)) ]
res
# $ZEO1
# xx treatment
# 1 1 ZEO
#
# $ZEO2
# xx treatment
# 1 3 ZEO
这是另一个使用列值的解决方案,这个 returns 空数据帧,我们使用 nrow
和子集排除:
# using lapply, then filter
res <- lapply(ListofData, function(x) x[ x$treatment == "ZEO", ] )
res <- res[ sapply(res, nrow) > 0 ]
res
# $ZEO1
# xx treatment
# 1 1 ZEO
#
# $ZEO2
# xx treatment
# 1 3 ZEO
我有一个很大的数据框列表,我想创建包含满足条件的数据框的子列表。列表中的每个数据框都有相同的列名,它们都有一个名为 treatment 的列,其中包含单词 ZEO 或 BLEO。我希望能够编写一个函数或一个单行代码,使我能够提取所有具有 "ZEO" 的数据帧。 (请注意,一个数据帧中只有一种处理,因此 ListofData$dataframe1$treatment 的所有行都等于 ZEO),列表很大(~300 个数据帧),我还有其他变量我希望能够提取。到目前为止,我尝试了这些方法,但它们似乎没有用
cond<- sapply(ListofData, function(x) x$treatment == "ZEO")
test <- ListofData[(cond)]
数据帧的名称也包含有关处理的信息,这就是我尝试这个的原因,但它returns一个空列表
test<-ListofData[grep('^[Zeo]+',ListofData)]
你能帮我想办法提取我需要的数据帧吗?
使用正则表达式的解决方案应该可行,请参阅此示例:
#example data
ListofData <- list(ZEO1 = data.frame(xx = 1, treatment = "ZEO"),
xx1 = data.frame(xx = 2, treatment = "xx"),
ZEO2= data.frame(xx = 3, treatment = "ZEO"))
#using regex
res <- ListofData[ grepl("^[Zeo]+", names(ListofData)) ]
res
# $ZEO1
# xx treatment
# 1 1 ZEO
#
# $ZEO2
# xx treatment
# 1 3 ZEO
这是另一个使用列值的解决方案,这个 returns 空数据帧,我们使用 nrow
和子集排除:
# using lapply, then filter
res <- lapply(ListofData, function(x) x[ x$treatment == "ZEO", ] )
res <- res[ sapply(res, nrow) > 0 ]
res
# $ZEO1
# xx treatment
# 1 1 ZEO
#
# $ZEO2
# xx treatment
# 1 3 ZEO