我想根據兩列更新一列
我的示例資料框包含 3 列
df <- data.frame(n1 = c(1,2,1,2,5,6),
n2 = c("a", "a", "a", NA, "b", "c"),
n3 = c("red", "red", NA, NA, NA, NA))
df
n1 n2 n3
1 1 a red
2 2 a red
3 1 a <NA>
4 2 <NA> <NA>
5 5 b <NA>
6 6 c <NA>
我想補充red名行號3,并4隨著條件是,如果值n1(即1,2)匹配n2(即a),即使第四行(n1不匹配n2)。
要點是如果n2== a,并且 的值與n1相關聯a,那么n3與值為 的同一行的值n1應該與 相加red。
我想要的輸出
n1 n2 n3
1 1 a red
2 2 a red
3 1 a red
4 2 <NA> red
5 5 b <NA>
6 6 c <NA>
對這種情況有什么建議嗎?我希望我的解釋足夠清楚。由于我的資料很長,我試圖找到一個好的處理它。
uj5u.com熱心網友回復:
在 中base R,創建一個邏輯向量以根據unique'n1'的值對 'df' 的行進行子集化,其中 'n2' 是“a”,然后使用第一個非 NA 元素分配與該元素對應的 'n3'來自'n3'
i1 <- with(df, n1 %in% unique(n1[n2 %in% 'a']))
df$n3[i1] <- na.omit(df$n3[i1])[1]
-輸出
> df
n1 n2 n3
1 1 a red
2 2 a red
3 1 a red
4 2 <NA> red
5 5 b <NA>
6 6 c <NA>
uj5u.com熱心網友回復:
更新:
df %>%
mutate(group = rep(row_number(), each=2, length.out = n())) %>%
group_by(group) %>%
mutate(n3 = ifelse(n1 %in% c(1,2) & any(n2 %in% "a", na.rm = TRUE), "red", n3)) %>%
ungroup() %>%
select(-group)
我們可以使用ifelse帶有使用定義的條件的陳述句any。
library(dplyr)
df %>%
mutate(n3 = ifelse(n1==1 | n1==2 & any(n2[3:4] %in% "a"), "red", n3))
n1 n2 n3
1 1 a red
2 2 a red
3 1 a red
4 2 <NA> red
5 5 b <NA>
6 6 c <NA>
uj5u.com熱心網友回復:
library(dplyr)
library(tidyr)
df %>%
group_by(n1) %>%
fill(n3) %>%
group_by(n2) %>%
fill(n3)
# # A tibble: 6 × 3
# # Groups: n2 [4]
# n1 n2 n3
# <dbl> <chr> <chr>
# 1 1 a red
# 2 2 a red
# 3 1 a red
# 4 2 NA red
# 5 5 b NA
# 6 6 c NA
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/312493.html
上一篇:用隨機行的值替換資料框中的特定值
