如何获取唯一ID并将另一列的每一行转换为R和Python中的另一列

问题描述 投票:0回答:1

我的数据具有以下形式:

groups <- c("4","4.2","4.2.1","4.2.1.1", "1", "1.2", "1.2.1", "1.2.1.2","1.2.1.2.1")
x <- data.frame(ID = c(rep("samp_1", 4), rep("samp_2", 5)), Group = groups)

我怎么得到这个?:

ID       col_1   col_2   col_3   col_4     col_5
samp_1   4       4.2     4.2.1   4.2.1.1   NA
samp_2   1       1.2     1.2.1   1.2.1.2   1.2.1.2.1

每一列将由字符串的长度确定,因此列4中的所有数据的长度将为4(或长度7(包括点)。

我正在寻找最通用的解决方案(例如,使用循环;使用尽可能少的包),因为我需要同时在R和Python中实现此方法。

python r string dataframe transpose
1个回答
0
投票

R中,我们可以使用rowid(从data.table开始)为新名称创建一列,并转向“宽”格式

library(dplyr)
library(data.table)
library(stringr)
x %>%
   mutate(name = str_c('col_', rowid(ID))) %>% 
   pivot_wider(names_from = name, values_from = Group)
# A tibble: 2 x 6
#  ID     col_1 col_2 col_3 col_4   col_5    
#  <chr>  <chr> <chr> <chr> <chr>   <chr>    
#1 samp_1 4     4.2   4.2.1 4.2.1.1 <NA>     
#2 samp_2 1     1.2   1.2.1 1.2.1.2 1.2.1.2.1

或使用data.table

library(data.table)
dcast(setDT(x), ID ~ paste0('col_', rowid(ID)), value.var = 'Group')
#       ID col_1 col_2 col_3   col_4     col_5
#1: samp_1     4   4.2 4.2.1 4.2.1.1      <NA>
#2: samp_2     1   1.2 1.2.1 1.2.1.2 1.2.1.2.1
© www.soinside.com 2019 - 2024. All rights reserved.