我有一個資料框如下:
| ID | 第 1 列 | 回應號 | 第 3 列 | Col4 |
|---|---|---|---|---|
| 1 | 藍色 | 729廣告 | 3.2 | 一種 |
| 2 | 橘子 | 295gS | 6.5 | 一種 |
| 3 | 紅色的 | 729廣告 | 8.4 | 乙 |
| 4 | 黃色 | 592Jd | 2.9 | 一種 |
| 5 | 綠色 | 937sa | 3.5 | 乙 |
我想計算一個新列 Col5,如果該行的 Col4 值為 A,并且資料集中某處存在另一列具有相同 RespId 但 Col4 值為 B 的行,則其值為 1。否則為值是 0。然后我將洗掉 Col4 值為 B 的所有行,只保留那些帶有 A 的行。我想使用 R tidymodels 配方包來做到這一點。我也想用資料框來做這一切。
在洗掉 Col4 值為 B 的行之前,所需的輸出表如下所示:
| ID | 第 1 列 | 回應號 | 第 3 列 | Col4 | 第 5 列 |
|---|---|---|---|---|---|
| 1 | 藍色 | 729廣告 | 3.2 | 一種 | 1 |
| 2 | 橘子 | 295gS | 6.5 | 一種 | 0 |
| 3 | 紅色的 | 729廣告 | 8.4 | 乙 | 0 |
| 4 | 黃色 | 592Jd | 2.9 | 一種 | 0 |
| 5 | 綠色 | 937sa | 3.5 | 乙 | 0 |
uj5u.com熱心網友回復:
這是否有效:
library(dplyr)
df %>% group_by(RespID) %>% mutate(col5 = case_when(Col4 == 'A' & last(Col4 == 'B') ~ 1, Col4 == 'B' & first(Col4 == 'B') ~ 0, TRUE ~ 0))
# A tibble: 5 x 6
# Groups: RespID [4]
ID Col1 RespID Col3 Col4 col5
<int> <chr> <chr> <dbl> <chr> <dbl>
1 1 blue 729Ad 3.2 A 1
2 2 orange 295gS 6.5 A 0
3 3 red 729Ad 8.4 B 0
4 4 yellow 592Jd 2.9 A 0
5 5 green 937sa 3.5 B 0
uj5u.com熱心網友回復:
你可以試試——
library(dplyr)
df %>%
group_by(RespID) %>%
mutate(Col5 = as.integer(all(c('A', 'B') %in% Col4) & Col4 == 'A')) %>%
ungroup
# ID Col1 RespID Col3 Col4 Col5
# <int> <chr> <chr> <dbl> <chr> <int>
#1 1 blue 729Ad 3.2 A 1
#2 2 orange 295gS 6.5 A 0
#3 3 red 729Ad 8.4 B 0
#4 4 yellow 592Jd 2.9 A 0
#5 5 green 937sa 3.5 B 0
all(c('A', 'B') %in% Col4)檢查A和B值是否存在,RespID而 Col4 == 'A'僅在'A'存在的地方給出 1 。
資料
df <- structure(list(ID = 1:5, Col1 = c("blue", "orange", "red", "yellow",
"green"), RespID = c("729Ad", "295gS", "729Ad", "592Jd", "937sa"
), Col3 = c(3.2, 6.5, 8.4, 2.9, 3.5), Col4 = c("A", "A", "B",
"A", "B")), row.names = c(NA, -5L), class = "data.frame")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333083.html
上一篇:這個for回圈不起作用,當我試圖給它不產生輸出的值時
下一篇:RFloop行為
