我想知道如何根据另一列更新一列的信息
我的例子看起来像
df <- data.frame(input = c("Teline stenopetala", "Teline stenopetala",
"Teline stenopetala", "Prunus lusitanica", "Prunus lusitanica"),
n1 = c("Genista stenopetala Webb & Berthel.", NA, NA, NA, "Prunus hixa Brouss ex. Willd."))
df
包括input
列和n1列,n1列的值与input
列的值相对应。
如果我在input
列中发现任何重复的行,我想调用n1
中空白的值将根据与input
列的值相关联的n1
中已经存在的值进行修改。
假设数据很大,所以我不想调用specific-name,例如使用df %>% mutate(n1 = case_when(input == "Teline stenopetala" ~ "..."
我想要的输出:
df <- data.frame(input = c("Teline stenopetala", "Teline stenopetala",
"Teline stenopetala", "Prunus lusitanica", "Prunus lusitanica"),
n1 = c("Genista stenopetala Webb & Berthel.", "Genista stenopetala Webb & Berthel.", "Genista stenopetala Webb & Berthel.", "Prunus hixa Brouss ex. Willd.", "Prunus hixa Brouss ex. Willd."))
您可以将group_by
和fill
按@margusl的建议向下设置,像这样:
library(tidyverse)
df %>%
group_by(input) %>%
fill(n1, .direction = "downup")
输出:
# A tibble: 5 × 2
# Groups: input [2]
input n1
<chr> <chr>
1 Teline stenopetala Genista stenopetala Webb & Berthel.
2 Teline stenopetala Genista stenopetala Webb & Berthel.
3 Teline stenopetala Genista stenopetala Webb & Berthel.
4 Prunus lusitanica Prunus hixa Brouss ex. Willd.
5 Prunus lusitanica Prunus hixa Brouss ex. Willd.
试试这个
df <- data.frame(input = c("Teline stenopetala", "Teline stenopetala",
"Teline stenopetala", "Prunus lusitanica", "Prunus lusitanica"),
n1 = c("Genista stenopetala Webb & Berthel.", NA, NA, NA, "Prunus hixa Brouss ex. Willd."))
library(dplyr , warn.conflicts = FALSE)
df %>% group_by(input) %>%
mutate(n1 = n1[which(!is.na(n1))])
#> # A tibble: 5 × 2
#> # Groups: input [2]
#> input n1
#> <chr> <chr>
#> 1 Teline stenopetala Genista stenopetala Webb & Berthel.
#> 2 Teline stenopetala Genista stenopetala Webb & Berthel.
#> 3 Teline stenopetala Genista stenopetala Webb & Berthel.
#> 4 Prunus lusitanica Prunus hixa Brouss ex. Willd.
#> 5 Prunus lusitanica Prunus hixa Brouss ex. Willd.
由reprex包(v2.0.1)创建于2022-06-12