我花了一些时间寻找解决方案,但是我失败了......就像标题中一样,实际上我不知道如何解释,所以示例 df:
A <- c('ABC','GHI',rep(NA,3))
B <- c('AAB','ABC','BCE','CAB',NA)
C <- c('ABC','BCE','GHI','XXX','ZZZ')
D <- c('BCE',rep(NA,4))
E <- c('GHI','ZZZ','BAR',rep(NA,2))
df <- data.frame(A,B,C,D,E)
A B C D E
1 ABC AAB ABC BCE GHI
2 GHI ABC BCE <NA> ZZZ
3 <NA> BCE GHI <NA> BAR
4 <NA> CAB XXX <NA> <NA>
5 <NA> <NA> ZZZ <NA> <NA>
Run Code Online (Sandbox Code Playgroud)
现在我想对行重新排序,使每行具有相同的值,或者NA如果某些列中不存在特定值。期望的输出:
A B C D E
1 ABC ABC ABC NA NA
2 GHI NA GHI NA GHI
3 NA AAB NA NA NA
4 NA BCE BCE BCE NA
5 NA NA ZZZ NA ZZZ
6 NA NA XXX NA NA
7 NA NA NA NA BAR
8 NA CAB NA NA NA
Run Code Online (Sandbox Code Playgroud)
顺序并不重要,您能给我一个提示如何实现这一点吗?
您可以将数据旋转为长,然后再旋转回宽。
\nlibrary(tidyverse)\n\ndf %>%\n pivot_longer(everything(), values_drop_na = TRUE) %>%\n mutate(id = value) %>% \n pivot_wider(id_cols = id)\n\n# # A tibble: 8 \xc3\x97 6\n# id A B C D E \n# <chr> <chr> <chr> <chr> <chr> <chr>\n# 1 ABC ABC ABC ABC NA NA \n# 2 AAB NA AAB NA NA NA \n# 3 BCE NA BCE BCE BCE NA \n# 4 GHI GHI NA GHI NA GHI \n# 5 ZZZ NA NA ZZZ NA ZZZ \n# 6 BAR NA NA NA NA BAR \n# 7 CAB NA CAB NA NA NA \n# 8 XXX NA NA XXX NA NA\nRun Code Online (Sandbox Code Playgroud)\n等效base方式:
reshape(transform(na.omit(stack(df)), id = values),\n direction = "wide", idvar = "id", timevar = "ind", v.names = "values")\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |