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

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

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选项:

l <- split.default(df, names(df)) %>|
  lapply(\(x) unname(unlist(x)))
data.frame(sapply(l, "length<-", max(lengths(l))))

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

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

英文:

A base R option:

l &lt;- split.default(df, names(df)) |&gt;
  lapply(\(x) unname(unlist(x)))
data.frame(sapply(l, &quot;length&lt;-&quot;, max(lengths(l))))

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

答案2

得分: 1

以下是代码部分的翻译:

library(tidyverse)
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")
df
#> # A tibble: 2 × 5
#>       A     B     C     D     C
#>   <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1     1     2     3     4     5
#> 2     3     4     4     4     4

dupe_names <- duplicated(names(df))
bind_rows(df[!dupe_names], df[dupe_names])
#> # A tibble: 4 × 4
#>       A     B     C     D
#>   <dbl> <dbl> <dbl> <dbl>
#> 1     1     2     3     4
#> 2     3     4     4     4
#> 3    NA    NA     5    NA
#> 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:

library(tidyverse)
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;)
df
#&gt; # A tibble: 2 &#215; 5
#&gt;       A     B     C     D     C
#&gt;   &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;
#&gt; 1     1     2     3     4     5
#&gt; 2     3     4     4     4     4

dupe_names &lt;- duplicated(names(df))
bind_rows(df[!dupe_names], df[dupe_names])
#&gt; # A tibble: 4 &#215; 4
#&gt;       A     B     C     D
#&gt;   &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;
#&gt; 1     1     2     3     4
#&gt; 2     3     4     4     4
#&gt; 3    NA    NA     5    NA
#&gt; 4    NA    NA     4    NA

答案3

得分: 1

使用 cbind.na

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

-输出

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

Using cbind.na

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

-output

&gt; out
      A  B C  D
[1,]  1  2 3  4
[2,]  3  4 4  4
[3,] NA NA 5 NA
[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:

确定