2017-03-02 45 views
0

我很難將一些計算應用於列表中的數據框。實際上,我從一開始就失敗了,當時我試圖從每個data.frame中挑選一些行。如何從R列表中的所有數據框中選擇一些行?

這段代碼生成的東西與我的數據非常相似,儘管我的列表中有更多更長的數據幀。

ROI <- c("0", "1", "blank") 
Red <- c(17, 48, 1.9) 
Green <- c(13, 0.2, 1.1) 
df1 <- data.frame(ROI, Red, Green, stringsAsFactors = FALSE) 
df1_tb <- tbl_df(df1) 
ROI <- c("0", "1", "2", "3", "blank1", "blank2") 
Red <- c(14, 22, 53, 11, 0.5, 0.7) 
Green <- c(110, 109, 57, 11, 2, 7) 
df2 <- data.frame(ROI, Red, Green, stringsAsFactors = FALSE) 
df2_tb <- tbl_df(df2) 
my_list <- list(df1_tb, df2_tb) 

> my_list 
[[1]] 
# A tibble: 3 × 3 
    ROI Red Green 
    <chr> <dbl> <dbl> 
1  0 17.0 13.0 
2  1 48.0 0.2 
3 blank 1.9 1.1 

[[2]] 
# A tibble: 6 × 3 
    ROI Red Green 
    <chr> <dbl> <dbl> 
1  0 14.0 110 
2  1 22.0 109 
3  2 53.0 57 
4  3 11.0 11 
5 blank1 0.5  2 
6 blank2 0.7  7 

我想嘗試什麼是找到行時ROI列或包含「空白」,計算意味着這些行對每個數據幀,然後從行的其餘部分中減去這些值。 我想結合greplfilterfilter(my_list, grepl("blank", my_list, my_list$ROI)),但是這給了我以下錯誤:

Error in UseMethod("filter_") : 
    no applicable method for 'filter_' applied to an object of class "list" 

當我嘗試將這種方法用於在我的名單,它的工作原理單一元素;

> k <- filter(df2, grepl("blank", df2$ROI)) 
> k 
    ROI Red Green 
1 blank1 0.5  2 
2 blank2 0.7  7 

我也嘗試使用lapply或它的一些嵌套形式,但沒有成功。在這裏,當我想寫類似

lapply(my_list, filter, grepl("blank", my_list$ROI)) 

我不知道我應該如何在這種情況下,飼料grepl的,所以它應該開始在每個數據幀校驗列,但沒有對象my_list。 我不是很擅長R,我想我在這裏失蹤,命令lapply或sapply函數工作。或者,也許我應該改變我如何從一開始就嘗試做...

我該如何解決我的問題?任何建議,非常感謝!

+0

的'lapply'嘗試接近,看看其他地方使用'lapply'的例子。我認爲它應該是像'lapply(my_list,function(df)filter(df,grepl(「blank」,ROI))%>%...)''''''''''是你想要的方式計算。 – vincentmajor

回答

0

你太親近了。您的代碼參考mylist其中(根據您的代碼)不存在。此外,my_list$ROI也不存在,因爲my_list是未命名的列表。你想要什麼(我認爲)$ROI列的數據列表中的每個元素。框架

您對lapply調用看起來整潔,不要求匿名函數,但我建議你要麼定義自己的filter功能或只使用一個匿名-FUNC這裏:

lapply(my_list, function(x) filter(x, grepl("blank", ROI))) 
# [[1]] 
# # A tibble: 1 × 3 
#  ROI Red Green 
# <chr> <dbl> <dbl> 
# 1 blank 1.9 1.1 
# [[2]] 
# # A tibble: 2 × 3 
#  ROI Red Green 
# <chr> <dbl> <dbl> 
# 1 blank1 0.5  2 
# 2 blank2 0.7  7 
+0

對不起,我編輯過,所以現在通過我的帖子是'my_list'。您對data.frames_列表中的每個元素都是正確的。按照您的建議,我會檢查'lapply'。非常感謝。 – dumbuk

+0

這正是我需要的!我不敢相信這比我想象的要容易得多。你太棒了! – dumbuk

相關問題