合并在R中相同名称的数据集中的列。

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

Combine Columns with same name in the same dataset in R

问题

例如:
我有一个数据框(df)

df

A B C D C
1 2 3 4 5
3 4 4 4 4

我想要得到这样的结果:

A B C D
1 2 3 4
3 4 4 4
NA NA 5 NA
NA NA 4 NA
英文:

For example:
I have one df

df

A B C D C
1 2 3 4 5
3 4 4 4 4

I would like to have this:

A B C D
1 2 3 4
3 4 4 4
NA NA 5 NA
NA NA 4 NA

答案1

得分: 1

一个基本的R选项:

  1. l <- split.default(df, names(df)) %>|
  2. lapply(\(x) unname(unlist(x)))
  3. data.frame(sapply(l, "length<-", max(lengths(l))))
  4. # A B C D
  5. #1 1 2 3 4
  6. #2 3 4 4 4
  7. #3 NA NA 5 NA
  8. #4 NA NA 4 NA

注意:代码部分没有进行翻译,只提供了代码的原文。

英文:

A base R option:

  1. l &lt;- split.default(df, names(df)) |&gt;
  2. lapply(\(x) unname(unlist(x)))
  3. data.frame(sapply(l, &quot;length&lt;-&quot;, max(lengths(l))))
  4. # A B C D
  5. #1 1 2 3 4
  6. #2 3 4 4 4
  7. #3 NA NA 5 NA
  8. #4 NA NA 4 NA

答案2

得分: 1

以下是代码部分的翻译:

  1. library(tidyverse)
  2. df <- tibble(A = c(1,3), B = c(2,4), C = c(3, 4), D = c(4, 4), C = c(5, 4), .name_repair = "minimal")
  3. df
  4. #> # A tibble: 2 × 5
  5. #> A B C D C
  6. #> <dbl> <dbl> <dbl> <dbl> <dbl>
  7. #> 1 1 2 3 4 5
  8. #> 2 3 4 4 4 4
  9. dupe_names <- duplicated(names(df))
  10. bind_rows(df[!dupe_names], df[dupe_names])
  11. #> # A tibble: 4 × 4
  12. #> A B C D
  13. #> <dbl> <dbl> <dbl> <dbl>
  14. #> 1 1 2 3 4
  15. #> 2 3 4 4 4
  16. #> 3 NA NA 5 NA
  17. #> 4 NA NA 4 NA

希望这对你有所帮助。

英文:

You might have done something wrong beforehand to get into this position so if you can try to fix issues upstream. Otherwise:

  1. library(tidyverse)
  2. df &lt;- tibble(A = c(1,3), B = c(2,4), C = c(3, 4), D = c(4, 4), C = c(5, 4), .name_repair = &quot;minimal&quot;)
  3. df
  4. #&gt; # A tibble: 2 &#215; 5
  5. #&gt; A B C D C
  6. #&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;
  7. #&gt; 1 1 2 3 4 5
  8. #&gt; 2 3 4 4 4 4
  9. dupe_names &lt;- duplicated(names(df))
  10. bind_rows(df[!dupe_names], df[dupe_names])
  11. #&gt; # A tibble: 4 &#215; 4
  12. #&gt; A B C D
  13. #&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;
  14. #&gt; 1 1 2 3 4
  15. #&gt; 2 3 4 4 4
  16. #&gt; 3 NA NA 5 NA
  17. #&gt; 4 NA NA 4 NA

答案3

得分: 1

使用 cbind.na

  1. out <- do.call(qpcR:::cbind.na, lapply(split.default(df, sub("\\.\\d+", "", names(df))), unlist))
  2. row.names(out) <- NULL

-输出

  1. > out
  2. A B C D
  3. [1,] 1 2 3 4
  4. [2,] 3 4 4 4
  5. [3,] NA NA 5 NA
  6. [4,] NA NA 4 NA
英文:

Using cbind.na

  1. out &lt;- do.call(qpcR:::cbind.na, lapply(split.default(df, sub(&quot;\\.\\d+&quot;, &quot;&quot;,
  2. names(df))), unlist))
  3. row.names(out) &lt;- NULL

-output

  1. &gt; out
  2. A B C D
  3. [1,] 1 2 3 4
  4. [2,] 3 4 4 4
  5. [3,] NA NA 5 NA
  6. [4,] NA NA 4 NA

huangapple
  • 本文由 发表于 2023年2月24日 00:57:23
  • 转载请务必保留本文链接:https://go.coder-hub.com/75547962.html
匿名

发表评论

匿名网友

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

确定