簡體   English   中英

R 根據條件行制作條件列

[英]R Make a conditional column based on conditional row

我有一個具有長格式但具有行分隔的數據集,例如此示例

 <style type="text/css"> table.tableizer-table { font-size: 12px; border: 1px solid #CCC; font-family: Arial, Helvetica, sans-serif; }.tableizer-table td { padding: 4px; margin: 3px; border: 1px solid #CCC; }.tableizer-table th { background-color: #104E8B; color: #FFF; font-weight: bold; } </style> <table class="tableizer-table"> <thead><tr class="tableizer-firstrow"><th>First year</th><th>&nbsp;</th><th>&nbsp;</th><th>&nbsp;</th><th>&nbsp;</th><th>&nbsp;</th><th>&nbsp;</th><th>&nbsp;</th><th>&nbsp;</th><th>&nbsp;</th><th>&nbsp;</th></tr></thead><tbody> <tr><td>8</td><td>101</td><td>6</td><td>OBL</td><td>Hist1</td><td>9</td><td>ORD</td><td>2020</td><td>&nbsp;</td><td>2081355</td><td>106</td></tr> <tr><td>8</td><td>102</td><td>6</td><td>OBL</td><td>Eco1</td><td>6</td><td>ORD</td><td>2020</td><td>&nbsp;</td><td>2081395</td><td>106</td></tr> <tr><td>Second year</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr> <tr><td>8</td><td>204</td><td>6</td><td>OBL</td><td>Hist2</td><td>5</td><td>ORD</td><td>2021</td><td>&nbsp;</td><td>2219787</td><td>202</td></tr> <tr><td>8</td><td>204</td><td>6</td><td>OBL</td><td>Eco2</td><td>NP</td><td>ORD</td><td>2022</td><td>&nbsp;</td><td>2492841</td><td>206</td></tr> </tbody></table>

所以我知道如何使用 mutate、case_when 和 ifelse 創建條件變量,我的預期結果是根據年份消除行和添加列。 像這樣。

 <style type="text/css"> table.tableizer-table { font-size: 12px; border: 1px solid #CCC; font-family: Arial, Helvetica, sans-serif; }.tableizer-table td { padding: 4px; margin: 3px; border: 1px solid #CCC; }.tableizer-table th { background-color: #104E8B; color: #FFF; font-weight: bold; } </style> <table class="tableizer-table"> <thead><tr class="tableizer-firstrow"><th>name1</th><th>name2</th><th>name3</th><th>name4</th><th>name5</th><th>name6</th><th>name7</th><th>name8</th><th>name9</th><th>name10</th><th>name11</th><th>year</th></tr></thead><tbody> <tr><td>8</td><td>101</td><td>6</td><td>OBL</td><td>Hist1</td><td>9</td><td>ORD</td><td>2020</td><td>&nbsp;</td><td>2081355</td><td>106</td><td>1</td></tr> <tr><td>8</td><td>102</td><td>6</td><td>OBL</td><td>Eco1</td><td>6</td><td>ORD</td><td>2020</td><td>&nbsp;</td><td>2081395</td><td>106</td><td>1</td></tr> <tr><td>8</td><td>204</td><td>6</td><td>OBL</td><td>Hist2</td><td>5</td><td>ORD</td><td>2021</td><td>&nbsp;</td><td>2219787</td><td>202</td><td>2</td></tr> <tr><td>8</td><td>204</td><td>6</td><td>OBL</td><td>Eco2</td><td>NP</td><td>ORD</td><td>2022</td><td>&nbsp;</td><td>2492841</td><td>206</td><td>2</td></tr> </tbody></table>

我的代碼很少,所以你不必寫。

library(tible)
df <- tribble(
  ~name1, ~name2,
  "first year", NA,
  "eco1",   'NP',
  "hist1",   '5',
  "second year", NA,
  "eco2",   'NP',
  "hist2",   '5'
)

您可以根據name1中是否存在文本"year"name2中的NA值來執行此操作。 選擇適合您情況的。

基於"year"

library(dplyr)
df %>%
   mutate(year = cumsum(grepl('year', name1))) %>%
   filter(!grepl('year', name1))

或基於name2中的NA

df %>%
  mutate(year = cumsum(is.na(name2))) %>%
  filter(!is.na(name2))

兩者都返回:

#  name1 name2  year
#  <chr> <chr> <int>
#1 eco1  NP        1
#2 hist1 5         1
#3 eco2  NP        2
#4 hist2 5         2

暫無
暫無

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

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