主頁 > 軟體設計 > 嵌套串列中的資料清理和子集化

嵌套串列中的資料清理和子集化

2022-02-19 14:11:32 軟體設計

我找不到任何以前的問題來解決嵌套串列中的這些步驟。我自己的 attems 也沒有讓我到任何地方!

我有一個嵌套串列df

  1. 我想將所有 data.frames 中前 3 列的列名更改為c("one","two","three").
  2. 在每個資料框中,要保留前 3 列以及與串列中的資料框名稱相同的列。
  3. 現在每個資料框有 4 列。在每個資料框中,如果第四列的值大于 3,我想保留第二列中的值。
  4. 回傳一個嵌套串列,其中包含每個資料框的名稱和第二列中的選定值(在步驟 4 中)。

Purrrdplyr方法是首選,但其他一切都非常感謝!

> dput(map_depth(df,1, head))
list(`CD8_C01-LEF1` = structure(list(...1 = c("1236", "6194", 
"51176", "6402", "6137", "1937"), ...2 = c("CCR7", "RPS6", "LEF1", 
"SELL", "RPL13", "EEF1G"), ...3 = c(448.275813024615, 114.565282822255, 
405.993571415472, 352.462886197845, 152.430598462657, 73.5226212775651
), `P-value*` = c(0, 2.35914832807463e-150, 0, 0, 1.03146807397557e-195, 
3.00681346250943e-98), `CD8_C01-LEF1` = c(6.3388353508401, 1.36075129906401, 
5.11667843995657, 5.22902495053118, 1.35703181746742, 1.72815687302818
), `CD8_C02-GPR183` = c(2.71993044636725, 0.755445092850178, 
2.26029822474036, 3.57732840656951, 0.757664532314421, 0.732003573596204
), `CD8_C03-CX3CR1` = c(-2.50016459757821, 0.0430813598361915, 
-1.47763877045973, -1.31104077043168, -0.118054173396857, -0.217984797372657
), `CD8_C04-GZMK` = c(-0.639352384551204, -0.304854019068466, 
-1.400271288872, -1.56965980479594, -0.128422617265835, -0.701864111617954
), `CD8_C05-CD6` = c(-2.35873754058284, -0.115888861319928, -2.08628173736428, 
-3.32630706764402, -0.177640817498698, -0.215754243123614), `CD8_C06-CD160` = c(-2.85558322130952, 
-0.29530343951866, -2.20232116143474, -3.274807762691, -0.440783845861116, 
-0.56207661416919), `CD8_C07-LAYN` = c(-2.75671138163062, -0.887003245107014, 
-2.40845402752497, -3.47698326675668, -1.03656381624963, -1.46468960616135
), `CD8_C08-SLC4A10` = c(-2.68199272253543, 0.0292368512820967, 
-2.1581654239029, -2.99895134853712, 0.0615744908900675, 0.192173783941343
)), row.names = c(NA, 6L), class = "data.frame"), `CD8_C02-GPR183` = structure(list(
    ...1 = c("3575", "4050", "1901", "6653", "1880", "10628"), 
    ...2 = c("IL7R", "LTB", "S1PR1", "SORL1", "GPR183", "TXNIP"
    ), ...3 = c(268.347035159053, 151.397715576146, 423.815475272167, 
    154.131971403975, 161.502687932662, 138.188069200824), `P-value*` = c(0, 
    1.63481853000449e-194, 0, 1.09616441981898e-197, 3.47999420200636e-206, 
    5.87606326954945e-179), `CD8_C01-LEF1` = c(2.25872137515665, 
    1.06433926285014, 2.06890434595653, 1.77222927526522, -2.32256398023726, 
    1.17445992511194), `CD8_C02-GPR183` = c(3.58534594694992, 
    2.33774626980998, 3.1044712936119, 3.00075778716827, 1.54874669286004, 
    2.11053414857411), `CD8_C03-CX3CR1` = c(-2.73122665345433, 
    -3.23251051546321, 2.76359001828421, 0.899851788567591, -3.4595583469893, 
    1.9924219816788), `CD8_C04-GZMK` = c(-1.20359289904198, -2.27859013855459, 
    -0.289843306560729, 0.0930099548084882, 0.293766916539111, 
    -1.05998934689132), `CD8_C05-CD6` = c(0.771026257612103, 
    -1.84446654315228, -1.92859019625536, -0.993527571866541, 
    -0.517242518264243, -1.05505195656161), `CD8_C06-CD160` = c(-1.26433565787961, 
    -3.62072638085859, -1.99838091859197, -2.66224984657089, 
    -3.84677781455005, -0.741084525734145), `CD8_C07-LAYN` = c(-4.85420539962432, 
    -3.79535857695107, -2.07599716553024, -2.41001692585172, 
    -3.66993376805675, -1.90910214659534), `CD8_C08-SLC4A10` = c(1.79563839118781, 
    0.431971358693421, 0.24665792844753, 0.820564247625701, -0.941462395796914, 
    0.224912511574641)), row.names = c(NA, 6L), class = "data.frame"), 
    `CD8_C03-CX3CR1` = structure(list(...1 = c("5341", "1524", 
    "83888", "2214", "343413", "10219"), ...2 = c("PLEK", "CX3CR1", 
    "FGFBP2", "FCGR3A", "FCRL6", "KLRG1"), ...3 = c(372.816216710618, 
    713.554708746553, 575.834099328186, 419.996034284325, 215.715234731706, 
    281.827177706662), `P-value*` = c("0", "0", "0", "0", "3.5450627744914998E-266", 
    "0"), `CD8_C01-LEF1` = c(-1.34745098111019, -0.39476162886016, 
    -0.248194028712413, -0.326944139043036, -0.833877751680806, 
    -0.822668603983214), `CD8_C02-GPR183` = c(0.50737446056126, 
    -0.495638146054913, -0.484905896571723, -0.125753818325312, 
    0.0263098770399738, 0.894340812937189), `CD8_C03-CX3CR1` = c(6.36825282208761, 
    5.38301238794739, 5.26196506464758, 5.6197563760267, 5.8532850807879, 
    5.36851683724817), `CD8_C04-GZMK` = c(1.44463895049283, -0.513803138075432, 
    -0.125340966094923, 0.2447981258131, 1.34537977512099, 2.10784813093189
    ), `CD8_C05-CD6` = c(-0.718776566594413, -0.795121492384525, 
    -0.681892196238474, -0.421395883952147, 0.0987360993173341, 
    -1.35585804120358), `CD8_C06-CD160` = c(-0.550964233191398, 
    -0.794078725052049, -0.707741972359531, -0.156207202527366, 
    2.24842830259497, -1.28977809817504), `CD8_C07-LAYN` = c(0.0641870785667258, 
    -0.785201010640904, -0.631939964779986, -0.340799120353511, 
    0.271892089522186, 0.236064375692484), `CD8_C08-SLC4A10` = c(1.40102283829925, 
    -0.158585496249154, -0.056110756095033, 0.00915832466806331, 
    -0.085141865592199, 3.78847417230501)), row.names = c(NA, 
    6L), class = "data.frame"))

uj5u.com熱心網友回復:

這是一個purrr解決dplyr方案:

library(tidyverse)

map2(df_list, names(df_list), 
     \(dat, name) {
       dat |>
         select(one = ...1, 
                two = ...2, 
                three = ...3, 
                all_of(name)) |>
         (\(d) filter(d, d[,4] > 3))() |>
         pull(two)
         }
       )
#> $`CD8_C01-LEF1`
#> [1] "CCR7" "LEF1" "SELL"
#> 
#> $`CD8_C02-GPR183`
#> [1] "IL7R"  "S1PR1" "SORL1"
#> 
#> $`CD8_C03-CX3CR1`
#> [1] "PLEK"   "CX3CR1" "FGFBP2" "FCGR3A" "FCRL6"  "KLRG1"

編輯:解釋

map2= 我在這里使用它是因為您有一個資料框串列并且map可以很好地與串列一起使用。我使用“2”變體是因為您還想根據串列名稱選擇列。

\(dat, name)= 使用來自 的兩個輸入創建一個匿名函式map2,其中我將資料定義為dat并將串列的名稱定義為name

select(one = ...1, two = ...2, three = ...3, all_of(name))= 在這里,我根據您在問題中的要求選擇并重命名前三列,并且我還選擇了帶有all_of(name). 請記住,這name是在匿名函式中為串列名稱定義的變數名稱。

(\(d) filter(d, d[,4] > 3))()= 這是一個有點時髦的語法,因為我喜歡使用原生管道運算子 ( |>) 而不是magritr管道運算子 ( %>%)。這意味著我創建了另一個匿名函式 ( \(d)),它將當前資料定義為d. 然后我filter d基于第 4 列大于 3(即 d[,4] > 3)。如果使用magritr管道,則可以簡化為filter(.[,4] > 3). 更好的是使用非標準評估來完全避免使用匿名函式,但是我很難弄清楚正確使用{{}}, quo,enquo!!whith 參考的列名。

pull(two)= 最后,我們只從名為 的列中選擇值two

編輯 2:清理代碼。

我想出了非標準的 eval 來清理奇怪的語法。

map2(df_list, names(df_list), 
     \(dat, name) {
       dat |>
         select(one = ...1, 
                two = ...2, 
                three = ...3, 
                all_of(name)) |>
         filter(!!sym(all_of(name)) > 3) |>
         pull(two)
         }
       )
#> $`CD8_C01-LEF1`
#> [1] "CCR7" "LEF1" "SELL"
#> 
#> $`CD8_C02-GPR183`
#> [1] "IL7R"  "S1PR1" "SORL1"
#> 
#> $`CD8_C03-CX3CR1`
#> [1] "PLEK"   "CX3CR1" "FGFBP2" "FCGR3A" "FCRL6"  "KLRG1"

uj5u.com熱心網友回復:

一個解決方案是:

res <- lapply(setNames(nm = names(df)), function(dfname) {
  dff <- df[[dfname]]

  # only renaming column 2 as columns 1 and 3 are not used later on
  colnames(dff)[2] <- "two" 

  # not 'keeping' the column with the same name as the dataframe, just using the dataframe straightaway   
  dff$two[dff[,dfname] > 3]
})

請注意該setNames(...)陳述句作為 的第一個引數lapply如果您將命名串列發送到lapply,它將使用元素的名稱作為它回傳的元素的名稱。

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/427736.html

標籤:r for循环 dplyr 应用 咕噜咕噜

上一篇:如何使用for回圈和zip函式在python中繪制子圖?

下一篇:只有第一個按鈕在Django回圈中有效

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more