我正在嘗試根據來自另一個資料集的條件和分組來折疊資料集。我當前的資料框看起來像這樣
對于每個“國會”中的每個“RollNo”,我都想要一個新變數來指示同一州的兩位參議員是否一起投票(1,0)并且在同一黨派(1,0)
| 國會 | 森 | 卷號 | 狀態 | 投票 | 聚會 |
|---|---|---|---|---|---|
| 106 | 周杰倫 | 1 | 方舟 | 1 | 代表 |
| 106 | 瑪麗 | 1 | 方舟 | 1 | 民主黨 |
| 106 | 賬單 | 2 | 十 | 2 | 民主黨 |
| 106 | 凱文 | 2 | 十 | 1 | 民主黨 |
| 108 | 起訴 | 1 | 礦石 | 2 | 代表 |
| 108 | 莎莉 | 1 | 礦石 | 2 | 代表 |
| 108 | 麗莎 | 3 | SDak | 1 | 代表 |
| 108 | 一分錢 | 3 | SDak | 2 | 代表 |
| 109 | 周杰倫 | 1 | 密歇根州 | 1 | 民主黨 |
| 109 | 瑪麗 | 1 | 密歇根州 | 9 | 代表 |
| 109 | 魯迪 | 5 | 卡爾 | 1 | 民主黨 |
| 109 | 奈爾斯 | 5 | 卡爾 | 1 | 民主黨 |
新的資料框應如下所示:
| 國會 | 卷號 | 狀態 | Pair_Vote | Pair_Party |
|---|---|---|---|---|
| 106 | 1 | 方舟 | 1 | 0 |
| 106 | 2 | 十 | 0 | 1 |
| 108 | 1 | 礦石 | 1 | 1 |
| 108 | 3 | SDak | 0 | 1 |
| 109 | 1 | 密歇根州 | 0 | 0 |
| 109 | 5 | 卡爾 | 1 | 1 |
我已經嘗試了下面的代碼,并對其進行了多次調整。我的資料集回傳相同的觀察結果和兩個新列的空向量作為我的新變數。
library(dplyr)
dataframe['Pair_Vote'] <- NA
dataframe['Pair_Party'] <- NA
newdata <- dataframe %>% group_by(congress, RollNo, state) %>%
mutate(Pair_Vote - case_when(any(Vote == Vote) ~ 1, FALSE ~ 0))
我不知所措。
uj5u.com熱心網友回復:
mutate當您想按原樣向資料框添加列時使用,當summarize您希望結果每組有一行時使用。您的輸出每組有一行,因此我們將使用summarize.
而且vote == vote不會有太大用處,讓我們n_distinct用來計算不同的值。
dataframe %>%
group_by(congress, RollNo, state) %>%
summarize(
Pair_Vote = ifelse(n_distinct(Vote) == 1, 1, 0),
Pair_Party = ifelse(n_distinct(Party) == 1, 1, 0)
)
uj5u.com熱心網友回復:
我們可以使用across一次修改多個列
library(dplyr)
dataframe %>%
group_by(congress, RollNo, state) %>%
summarise(across(c(Vote, Party),
~ (n_distinct(.x) == 1), .names = "Pair_{.col}"), .groups = 'drop')
-輸出
# A tibble: 6 × 5
congress RollNo state Pair_Vote Pair_Party
<int> <int> <chr> <int> <int>
1 106 1 Ark 1 0
2 106 2 Ten 0 1
3 108 1 Ore 1 1
4 108 3 SDak 0 1
5 109 1 Mich 0 0
6 109 5 Cal 1 1
資料
dataframe <- structure(list(congress = c(106L, 106L, 106L, 106L, 108L, 108L,
108L, 108L, 109L, 109L, 109L, 109L), sen = c("Jay", "Mary", "Bill",
"Kevin", "Sue", "Sally", "Lisa", "Penny", "Jay", "Mary", "Rudy",
"Niles"), RollNo = c(1L, 1L, 2L, 2L, 1L, 1L, 3L, 3L, 1L, 1L,
5L, 5L), state = c("Ark", "Ark", "Ten", "Ten", "Ore", "Ore",
"SDak", "SDak", "Mich", "Mich", "Cal", "Cal"), Vote = c(1L, 1L,
2L, 1L, 2L, 2L, 1L, 2L, 1L, 9L, 1L, 1L), Party = c("Rep", "Dem",
"Dem", "Dem", "Rep", "Rep", "Rep", "Rep", "Dem", "Rep", "Dem",
"Dem")), class = "data.frame", row.names = c(NA, -12L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/526998.html
下一篇:更快地填充矩陣
