r - 按行提取非缺失元素并堆叠它们
问题描述
我有一个这样的数据框
df <- data.frame(id = 1:4,
V1 = c("A", NA, "C", NA),
V2 = c(NA, NA, NA, "E"),
V3 = c(NA, "B", NA, "F"),
V4 = c(NA, NA, "D", NA), stringsAsFactors = F)
# id V1 V2 V3 V4
# 1 1 A <NA> <NA> <NA>
# 2 2 <NA> <NA> B <NA>
# 3 3 C <NA> <NA> D
# 4 4 <NA> E F <NA>
如何按行提取非缺失元素并将它们堆叠成一列?我的预期输出是:
# id value
# 1 1 A
# 2 2 B
# 3 3 C
# 4 3 D
# 5 4 E
# 6 4 F
解决方案
尝试pivot_longer()
或unite() + separate_rows()
。
library(tidyr)
library(dplyr)
# Method 1
df %>%
pivot_longer(-id, values_drop_na = T) %>%
select(-name)
# Method 2
df %>%
unite(value, -id, na.rm = T) %>%
separate_rows(value)
# # A tibble: 6 x 2
# id value
# <int> <chr>
# 1 1 A
# 2 2 B
# 3 3 C
# 4 3 D
# 5 4 E
# 6 4 F
推荐阅读
- docker - 是否可以在 Azure Web 应用服务中创建 ftpserver
- c# - 如何在 Crystal Reports 中将列数据显示为行标题
- java - 代码是否存在导致异常的问题?
- hive - 拒绝访问 - EMR Presto - 基于文件的授权
- excel - 将数据从计划中提取到指定的部门工作表
- sql - 加入多列时,匹配列的顺序是否重要?
- angular - Angularfire 项目的 Google Cloud Build 超时
- drupal - 向注册用户显示他们已经提交了哪些网络表单
- pandas - 熊猫解析周数
- mysql - 如何在 mysql 中找到 LEAST() 使用的列?