簡體   English   中英

如何通過提供有關列名的條件來創建 DataFrame 的子集

[英]How to create a subset of a DataFrame by giving a condition regarding the column names

抱歉,如果這是一個非常簡單的問題,我是編程新手。 我想通過使用特定的列名來創建 DataFrame(eclipse 數據集)的子集。 但是,由於總共有 212 列,而我需要其中的 41 列,因此將每個列名寫成一個列表會太長(我想這不是一種好的編碼方式)。 因此,我決定通過指定列名的開頭來獲取列(這會將列表減少到 15 個元素)。 我有以特定字母開頭的列名,例如“NOF”、“NOM”、“NSF”等,我想提取以這些字符串開頭的列來創建我的新子集。 我試圖運行下面的代碼:

eclipse_train <- subset(eclipse, select = starts_with(predictors))

預測變量是我希望列開始的單詞列表。 但當然,它給出了錯誤:

starts_with(predictors) 中的錯誤:is_string(match) 不是 TRUE

我想不出任何其他方法來過濾以我想創建子集的特定字符串開頭的列。 我怎樣才能實現這樣的事情?

假設注釋中的eclipse數據框,使用grep查找以指示的字符串開頭的名稱的索引,並由這些索引下標。 不使用任何包。

eclipse[ grep("^(NOF|NOM|NSF)", names(eclipse)) ]

給予:

  NOFX NOMX NSFX
1    2    3    4

筆記

如果所需的列是連續的,如注釋中的示例,那么這也適用於我們指定名字和姓氏的地方。

subset(eclipse, select = NOFX:NSFX)

給出相同的結果。

筆記

nms <- c("A", paste0(c("NOF", "NOM", "NSF"), "X"), "B")
eclipse <- as.data.frame.list(setNames(seq_along(nms), nms))

看起來像這樣:

> eclipse
  A NOFX NOMX NSFX B
1 1    2    3    4 5

暫無
暫無

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

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