r - 将数据框 8 行重塑为 2 行
问题描述
df<-structure(list(AC_NAME = c("Behat", "Behat", "Behat", "Behat",
"Nakur", "Nakur", "Nakur", "Nakur"), CAND_NAME = c("MAHAVEER SINGH RANA",
"NARESH", "UMAR ALI KHAN", "AJAY CHAUHAN", "DR. DHARAM SINGH SAINI",
"IMRAN MASOOD", "FIROZ AFTAB", "GOVIND CHOUDHARY"), PARTYABBRE = c("BSP",
"INC", "SP", "BJP", "BSP", "INC", "SP", "IND"), TOTVOTPOLL = c(70274,
69760, 47366, 23623, 89187, 84623, 29503, 14226), POSITION = c(1,
2, 3, 4, 1, 2, 3, 4)), row.names = c(NA, 8L), class = "data.frame")
>df
AC_NAME CAND_NAME PARTYABBRE TOTVOTPOLL POSITION
1 Behat MAHAVEER SINGH RANA BSP 70274 1
2 Behat NARESH INC 69760 2
3 Behat UMAR ALI KHAN SP 47366 3
4 Behat AJAY CHAUHAN BJP 23623 4
5 Nakur DR. DHARAM SINGH SAINI BSP 89187 1
6 Nakur IMRAN MASOOD INC 84623 2
7 Nakur FIROZ AFTAB SP 29503 3
8 Nakur GOVIND CHOUDHARY IND 14226 4
我希望它像这样重塑。
data
AC_NAME Candidate_Rank1 Candidate_Rank2 Candidate_Rank3 Candidate_Rank4 Party_Rank1 Party_Rank2 Party_Rank3 Party_Rank4 Votes_Rank1 Votes_Rank2 Votes_Rank3
1 Behat MAHAVEER SINGH RANA NARESH UMAR ALI KHAN AJAY CHAUHAN BSP INC SP BJP 70274 69760 47366
2 Nakur DR. DHARAM SINGH SAINI IMRAN MASOOD FIROZ AFTAB GOVIND CHOUDHARY BSP INC SP IND 89187 84623 29503
Votes_Rank4 Poistion1 Poistion2 Poistion3 Poistion4
1 23623 1 2 3 4
2 14226 1 2 3 4
我试过了dcast
。使用它我有更多的列。我认为它不会在这里工作我不确定。有人指导我。我不介意列名与我的相同,以后可以更改。
dd <- dcast(data, AC_NAME+CAND_NAME ~POSITION ,value.var = "POSITION")
解决方案
你可以使用dcast
-
library(data.table)
dcast(setDT(df), AC_NAME ~POSITION ,
value.var = c('CAND_NAME', 'PARTYABBRE', 'TOTVOTPOLL'))
# AC_NAME CAND_NAME_1 CAND_NAME_2 CAND_NAME_3 CAND_NAME_4 PARTYABBRE_1 PARTYABBRE_2
#1: Behat MAHAVEER SINGH RANA NARESH UMAR ALI KHAN AJAY CHAUHAN BSP INC
#2: Nakur DR. DHARAM SINGH SAINI IMRAN MASOOD FIROZ AFTAB GOVIND CHOUDHARY BSP INC
# PARTYABBRE_3 PARTYABBRE_4 TOTVOTPOLL_1 TOTVOTPOLL_2 TOTVOTPOLL_3 TOTVOTPOLL_4
#1: SP BJP 70274 69760 47366 23623
#2: SP IND 89187 84623 29503 14226
或使用tidyr::pivot_wider
.
tidyr::pivot_wider(df, names_from = POSITION, values_from = c(CAND_NAME, PARTYABBRE, TOTVOTPOLL))
POSITION
value 已包含在新数据框的列名中。
推荐阅读
- r - 使用 R 中的 head 和 tail 函数只显示行名?
- javascript - 在动画中重复内容阅读更多/更少
- javascript - 在 Typescript 中使用 Ant Design 的轮播下一个和上一个窗格方法?
- javascript - GraphQL query structure
- delphi - GDI+ drawing on a TBitmap
- ios - Displaying Push Notification Badges Without Notification Service Extension
- html - How to display a HTML page in a PowerShell dialog?
- html - Apply bootstrap class to all child anchors in angular component
- python - 为内存中的 SQLite 提供数据的应用程序的架构问题
- sublimetext3 - Sublime Text 不允许我保存文件