簡體   English   中英

使用lapply和ifelse子集數據幀列表

[英]Subsetting list of data frames using lapply and ifelse

我有數據幀列表:

d1<-data.frame(a=rnorm(5), b=c(rep(2006, times=4),NA))
d2<-data.frame(a=1:5, b=c(2007, 2007, NA, NA, 2007))  
d <- list(d1,d2)

我想基於第一行中b列的值對數據幀進行子集化。

d <- lapply(d, function(x) ifelse(x[1,2] == 2006, x[-1,], x))

我嘗試了上面的代碼。 我沒有返回刪除了數據幀1中第一行的數據幀列表,而是得到了以下內容:

[[1]]
[[1]][[1]]
[1] -1.0604320 -1.1117245 -0.2147006  1.0389965


[[2]]
[[2]][[1]]
[1] 1 2 3 4 5

預期的輸出如下:

[[1]]
           a    b
2 -1.0604320 2006
3 -1.1117245 2006
4 -0.2147006 2006
5  1.0389965   NA

[[2]]
  a    b
1 1 2007
2 2 2007
3 3   NA
4 4   NA
5 5 2007
d1<-data.frame(a=rnorm(5), b=c(rep(2006, times=4),NA))
d2<-data.frame(a=1:5, b=c(2007, 2007, NA, NA, 2007))  
d <- list(d1,d2)

d <- lapply(d, function(x) if(x[1,2] == 2006) x[-1,] else x)

#[[1]]
#           a    b
#2  0.5125665 2006
#3 -0.9842669 2006
#4 -1.9572385 2006
#5 -0.9411411   NA

#[[2]]
#  a    b
#1 1 2007
#2 2 2007
#3 3   NA
#4 4   NA
#5 5 2007

tidyverse

library(tidyverse)
d %>% 
  map(~filter(.,1:n() != 1 | b != 2006))
[[1]]
            a    b
1  2.14889697 2006
2  0.05842311 2006
3  1.89911545 2006
4 -0.16836139   NA

[[2]]
  a    b
1 1 2007
2 2 2007
3 3   NA
4 4   NA
5 5 2007

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM