3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
在中,我們可以使用(from )R為新名稱創(chuàng)建一個(gè)列,并將其轉(zhuǎn)換為“寬”格式rowiddata.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
或base R與reshape
reshape(transform(x, name = paste0('col_', ave(seq_along(ID), ID,
FUN = seq_along))), idvar = 'ID', direction = 'wide', timevar = 'name')

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
akrun 的優(yōu)秀選擇。如果數(shù)據(jù)有點(diǎn)亂,你可能想試試這個(gè):
x %>%
mutate(temp = str_c('col_', str_count(Group, "\\."))) %>%
pivot_wider(names_from = temp, values_from = Group) %>%
select(ID, order(colnames(.)))
數(shù)據(jù):
groups <- c("41.2","4","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)
結(jié)果:
# A tibble: 2 x 6
ID col_0 col_1 col_2 col_3 col_4
<chr> <chr> <chr> <chr> <chr> <chr>
1 samp_1 4 41.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

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
你可以在 python 中試試這個(gè):
import pandas as pd
import numpy as np
df= pd.DataFrame({'ID':np.repeat(["samp_1","samp_2"],[4,5]),
'groups':["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"],})
df['entry']=df.groupby(['ID']).cumcount()+1
我們?yōu)槊拷M提供一個(gè)數(shù)字,并將其添加為entry列。下面我們像在 R 中一樣進(jìn)行旋轉(zhuǎn),使用該列提供列名,最后我們重置索引:
df.pivot(values='groups',columns='entry',index='ID').reset_index()
entry ID 1 2 3 4 5
0 samp_1 4 4.2 4.2.1 4.2.1.1 NaN
1 samp_2 1 1.2 1.2.1 1.2.1.2 1.2.1.2.1
添加回答
舉報(bào)