r - 对多个数据进行排序并删除R中第一列中的重复项
问题描述
这是示例的一部分,但考虑到我在输出中有更多列。
df <- tribble(
~Name1, ~id1, ~place1,
"john, Saboor", 12, 1,
"Rose,Keely", 13, 2,
"Kate, Kaomeri", 17, 1,
"Ellis,Jorey", 19, 2,
"john, Saboor", 20, 3,
"john, Saboor", 23, 5,
"Rose,Keely", 18, 4,
"Harry,komi", 33, 1,
"Harry,komi", 32, 4,
"john, Saboor", 20, 3
)
逻辑是,在 Name1 中,我们有几个人,但是这些人的 id1 和 place1 不同。为了得到感兴趣的输出,假设“john, Saboor”,他在 Name1 中重复了 4 次。我想第一次将他保留在 column1 中,然后在 Name1 中删除他的所有信息。
接下来,我想将其视为 Name2、Name3、Name 4、Name5.... 并将他的信息保存在接下来的列中。如您所见,他重复了 4 次,然后您会在 Name1、Name2、Name3 和 Name4、id4 和 place4 中看到他的名字。下面,请查看感兴趣的输出。
我希望将 NA 视为空白
Name1 id1 place1 Name2 id2 place2 Name3 id3 place3 Name4 id4 place4
john, Saboor 12 1 NA NA NA NA NA NA NA NA NA
Rose,Keely 13 2 NA NA NA NA NA NA NA NA NA
Kate, Kaomeri 17 1 NA NA NA NA NA NA NA NA NA
Ellis,Jorey 19 2 NA NA NA NA NA NA NA NA NA
NA NA NA john, Saboor 20 3 NA NA NA NA NA NA
NA NA NA NA NA NA john, Saboor 23 5 NA NA NA
NA NA NA Rose,Keely 18 4 NA NA NA NA NA NA
Harry,komi 33 1 NA NA NA NA NA NA NA NA NA
NA NA NA Harry,komi 32 4 NA NA NA NA NA NA
NA NA NA NA NA NA NA NA NA john, Saboor 20 3
解决方案
使用dplyr
和tidyr
库,您可以:
library(dplyr)
library(tidyr)
df %>%
#Change the columns to character
mutate(across(.fns = as.character),
#Create a row number column
row = row_number()) %>%
#Get data in long format
pivot_longer(cols = -row) %>%
#Remove number from each of the column name
mutate(name = gsub('\\d+', '', name),
#Create a unique group number for each unique name
grp = match(value, unique(value[name == 'Name']))) %>%
#Fill `NA` values by previous non-NA value
fill(grp) %>%
#For each grp and column name
group_by(grp, name) %>%
#Create an incremental column number
mutate(name = paste0(name, row_number())) %>%
#Get data in wide format
pivot_wider(values_fill = '') %>%
ungroup %>%
#Remove unwanted columns
select(-row, -grp) %>%
data.frame()
推荐阅读
- c++ - 打印字符串输出为空
- react-native - React Native Fetch / Axios文件上传错误
- docker - 在 docker 卷中安装 MySQL,可以吗?Linux
- python - 如何在保持向后兼容性的同时在 python 中弃用自定义异常?
- django - django,无法使用 filefield 将文件上传到目录,
- next.js - next.js:如何定义带有服务器端渲染内容的 sitemap.xml 路由?
- python - AppEngine 标准 + 云任务 - 最大并发请求
- c# - 使用 AWS SES 时的 C# SmtpClient 连接池问题
- php - 传单嵌入视频未显示
- amazon-web-services - 使用 AWS lambda 从 API 读取 Json 响应