将列分离/拆分为三个单独的列,当存在NA值时。

huangapple go评论104阅读模式
英文:

Separate/unstack column into three separate columns when there are NA values

问题

我有一列数据,看起来像这样:

  1. value
  2. Ford
  3. Focus
  4. 2,300
  5. Chevy
  6. 15
  7. Toyota
  8. 245
  9. Honda
  10. Nissan

我想要将它转换成这样的格式,希望使用tidyverse解决方案。谢谢!

  1. Make Model Value
  2. Ford Focus 2,300
  3. Chevy NA 15
  4. Toyota NA 245
  5. Honda NA NA
  6. Nissan NA NA
英文:

I have a column that looks like this

  1. value
  2. Ford
  3. Focus
  4. 2,300
  5. Chevy
  6. 15
  7. Toyota
  8. 245
  9. Honda
  10. Nissan

How would I get it to look like this? Would like to use a tidyverse solution. Thanks!

  1. Make Model Value
  2. Ford Focus 2,300
  3. Chevy NA 15
  4. Toyota NA 245
  5. Honda NA NA
  6. Nissan NA NA

答案1

得分: 1

你可以这样做(这依赖于完整的Make数据):

  1. library(dplyr)
  2. library(tidyr)
  3. make <- c("Ford", "Chevy", "Toyota", "Honda", "Nissan")
  4. df %>%
  5. mutate(id = cumsum(value %in% make),
  6. name = case_when(value %in% make ~ "Make",
  7. grepl("\\d", value) ~ "Value",
  8. TRUE ~ "Model")) %>%
  9. pivot_wider(id_cols = id) %>%
  10. select(-id)

输出结果

  1. Make Model Value
  2. <chr> <chr> <chr>
  3. 1 Ford Focus 2,300
  4. 2 Chevy NA 15
  5. 3 Toyota NA 245
  6. 4 Honda NA NA
  7. 5 Nissan NA NA
英文:

You could do something like (this relies on complete data Make data):

  1. library(dplyr)
  2. library(tidyr)
  3. make &lt;- c(&quot;Ford&quot;, &quot;Chevy&quot;, &quot;Toyota&quot;, &quot;Honda&quot;, &quot;Nissan&quot;)
  4. df |&gt;
  5. mutate(id = cumsum(value %in% make),
  6. name = case_when(value %in% make ~ &quot;Make&quot;,
  7. grepl(&quot;\\d&quot;, value) ~ &quot;Value&quot;,
  8. T ~ &quot;Model&quot;))|&gt;
  9. pivot_wider(id_cols = id) |&gt;
  10. select(-id)

Output

  1. Make Model Value
  2. &lt;chr&gt; &lt;chr&gt; &lt;chr&gt;
  3. 1 Ford Focus 2,300
  4. 2 Chevy NA 15
  5. 3 Toyota NA 245
  6. 4 Honda NA NA
  7. 5 Nissan NA NA

huangapple
  • 本文由 发表于 2023年8月9日 01:25:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/76861905.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定