将列值拆分为R中的单独列

kpbwa7wx  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(106)

我想将未知值的 Dataframe 分成多个值。例如:
示例数据:

df <- data.frame(ID = c(1, 2, 3, 4, 5, 6, 7),
                  var1 = c('a', 'a', 'b', 'b', 'b','c','d'))

> df
  ID  var1
  1   'a'
  2   'a'
  3   'b'
  4   'b'
  5   'b'
  6   'c'
  7   'd'

我想返回:

df
  ID   a    b    c    d
  1   'a'   NA   NA   NA
  2   'a'   NA   NA   NA
  3    NA  'b'   NA   NA
  4    NA  'b'   NA   NA
  5    NA  'b'   NA   NA
  6    NA   NA  'c'   NA
  7    NA   NA   NA  'd'

这可能应该是真的很简单,但对我的生活,我不能弄清楚,我的搜索努力在这里想出了类似的东西,但不完全是我需要的答案。
谢谢!

b4lqfgs4

b4lqfgs41#

您可以在df$var的唯一值上使用sapply

cbind.data.frame(df[1], 
                 sapply(unique(df$var), function(x) ifelse(x == df$var1, x, NA)))

输出

ID a     b     c     d    
1     1 a     NA    NA    NA   
2     2 a     NA    NA    NA   
3     3 NA    b     NA    NA   
4     4 NA    b     NA    NA   
5     5 NA    b     NA    NA   
6     6 NA    NA    c     NA   
7     7 NA    NA    NA    d
apeeds0o

apeeds0o2#

另一种选择是使用pivot_wider,用names_from指定var1列的列名,用values_from指定var1列的值,如下所示:

library(tidyr)
df %>%
  pivot_wider(names_from = var1, values_from = var1)
#> # A tibble: 7 × 5
#>      ID a     b     c     d    
#>   <dbl> <chr> <chr> <chr> <chr>
#> 1     1 a     <NA>  <NA>  <NA> 
#> 2     2 a     <NA>  <NA>  <NA> 
#> 3     3 <NA>  b     <NA>  <NA> 
#> 4     4 <NA>  b     <NA>  <NA> 
#> 5     5 <NA>  b     <NA>  <NA> 
#> 6     6 <NA>  <NA>  c     <NA> 
#> 7     7 <NA>  <NA>  <NA>  d

创建于2022年12月12日,使用reprex v2.0.2

相关问题