R 子集将列表中匹配特定条件的数据帧相乘

R 子集将列表中匹配特定条件的数据帧相乘,r,list,subset,R,List,Subset,我是新来的,我被卡住了。我有一个数据框列表,其中包含了关于压力、温度和盐度的信息。我想把它们都子集,当压强等于5时,只保留温度和盐度的值。以下是列表的结构: str(CT_STP) List of 3 $ CT01_CTD1:'data.frame': 41 obs. of 3 variables: ..$ pressure : num [1:41] 1 2 3 4 5 6 7 8 9 10 ... ..$ temperature: num [1:41] 18.8 18.

我是新来的,我被卡住了。我有一个数据框列表,其中包含了关于压力、温度和盐度的信息。我想把它们都子集,当压强等于5时,只保留温度和盐度的值。以下是列表的结构:

str(CT_STP)
List of 3
$ CT01_CTD1:'data.frame':      41 obs. of  3 variables:
  ..$ pressure   : num [1:41] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ temperature: num [1:41] 18.8 18.8 18.8 18.8 18.8 ...
  ..$ salinity   : num [1:41] 34.1 34.1 34.1 34.1 34.1 ...
 $ CT02_CTD1:'data.frame':      69 obs. of  3 variables:
  ..$ pressure   : num [1:69] 2 3 4 5 6 7 8 9 10 11 ...
  ..$ temperature: num [1:69] 18.7 18.7 18.7 18.7 18.7 ...
  ..$ salinity   : num [1:69] 34 34 34 34 34 ...
 $ CT03_CTD1:'data.frame':      79 obs. of  3 variables:
  ..$ pressure   : num [1:79] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ temperature: num [1:79] 18.3 18.3 18.3 18.3 18.3 ...
  ..$ salinity   : num [1:79] 33.9 33.9 33.9 33.9 33.9 ...
我想对所有数据帧进行子集,只得到压力等于5时的温度和盐度

即使这样,我也尝试过很多事情:

PROF5<-lapply(CT_STP,subset(CT_STP, pressure==5,select="pressure","temperature","salinity"))

PROF5我创建了一个示例数据。使用
subset()
时,需要一个数据帧和一个条件。当您使用
lappy()
时,会使函数匿名。也就是说,您编写
函数(x)
并进一步编写希望R循环通过的代码。在本例中,您希望循环浏览列表并应用
subset()
。R将函数应用于列表中的每个数据帧,并处理子集设置。希望这对你有帮助

df1 <- data.frame(pressure = 1:5,
                  temperature = 18:22,
                  salinity = c(34.1, 34.1, 34.1, 34.1, 34.1))

df2 <- data.frame(pressure = 1:5,
                  temperature = 18:22,
                  salinity = c(34.1, 34.1, 34.1, 34.1, 34.1))

mylist <- list(df1, df2)

[[1]]
  pressure temperature salinity
1        1          18     34.1
2        2          19     34.1
3        3          20     34.1
4        4          21     34.1
5        5          22     34.1

[[2]]
  pressure temperature salinity
1        1          18     34.1
2        2          19     34.1
3        3          20     34.1
4        4          21     34.1
5        5          22     34.1

lapply(mylist, function(x) subset(x, pressure == 5))

[[1]]
  pressure temperature salinity
5        5          22     34.1

[[2]]
  pressure temperature salinity
5        5          22     34.1

@卡尔·阿伯格霍夫的快乐。:)我记得在某个地方读到过,你应该避免使用
subset()
(但我不记得在哪里或为什么)。另一种使用
[
的方法是
lappy(mylist,函数(x)x[x$pressure==5,])
@tospig谢谢你的评论。我还没有意识到你提到的问题。考虑到这个问题,你的建议是另一种方式。我将在我的回答中补充这一点。非常感谢你的支持。不客气。快速搜索显示,还链接到哈德利·威克姆的一篇好文章。
lapply(mylist, function(x) x[x$pressure == 5, ])