第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何獲取唯一 ID 并將另一列的每一行轉(zhuǎn)換為 R 和 Python 中的另一列

如何獲取唯一 ID 并將另一列的每一行轉(zhuǎn)換為 R 和 Python 中的另一列

藍(lán)山帝景 2022-12-14 20:37:50
我的數(shù)據(jù)具有以下形式: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)我如何得到這個(gè)?:ID       col_1   col_2   col_3   col_4     col_5samp_1   4       4.2     4.2.1   4.2.1.1   NAsamp_2   1       1.2     1.2.1   1.2.1.2   1.2.1.2.1每列將由字符串的長(zhǎng)度決定,因此第 4 列中的所有數(shù)據(jù)的長(zhǎng)度均為 4(或包括點(diǎn)在內(nèi)的長(zhǎng)度為 7)。我正在尋找最通用的解決方案(例如使用循環(huán);使用盡可能少的包)因?yàn)槲倚枰?R 和 Python 中實(shí)現(xiàn)它。
查看完整描述

3 回答

?
HUH函數(shù)

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')


查看完整回答
反對(duì) 回復(fù) 2022-12-14
?
aluckdog

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


查看完整回答
反對(duì) 回復(fù) 2022-12-14
?
慕虎7371278

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


查看完整回答
反對(duì) 回復(fù) 2022-12-14
  • 3 回答
  • 0 關(guān)注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)