根据另一列中信息的存在/不存在,有条件地向下填充一列

问题描述 投票:0回答:1

我正在尝试填充一个包含分类信息的大文件,以便每一行都包含相关数据。目前,文件是结构化的,因此,从亚类到亚种:

家庭 物种
F1 NA NA
NA G1 NA
NA NA S1
NA NA S2
NA G2 NA
NA NA S1
NA NA S2

这里比如我想在Species有数据的时候把Genus往下填,Family也一样,然后去掉多余的行。最终结果应该是这样的:

家庭 物种
F1 G1 S2
F1 G1 S2
F1 G2 S1
F1 G2 S2

我在下面包含了示例数据:

df <- data.frame(
family = c("Rheaidae",NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),
genus = c(NA,"Rhea",NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),
species = c(NA,NA,"americana",NA,NA,NA,NA,NA,"pennata",NA,NA,NA),
subspecies = c(NA,NA,NA,"americana","intermedia","nobilis","araneipes","albescens",NA,"garleppi","tarapacensis","pennata")
)

我已经尝试了几种不同的方法来组合 mutate、ifelse、loops 等,但我没有取得任何进展。我在下面提供了一个示例,它没有用,但这是我迄今为止最成功的尝试。

df %>%
  mutate(g = ifelse(is.na(subspecies), "NA", 
            zoo::na.locf(species, na.rm = F)))
家庭 物种 亚种
鲇科 NA NA NA NA
NA 土卫六 NA NA NA
NA NA 美国 NA NA
NA NA NA 美国 美国
NA NA NA 媒体 美国
NA NA NA 紫罗兰 美国
NA NA NA 蜘蛛 美国
NA NA NA 白炽灯 美国
NA NA pennata NA NA
NA NA NA garleppi pennata
NA NA NA 蒲公英 pennata
NA NA NA pennata pennata

编辑 @benson23 建议使用

df %>% fill(everything(), .direction = "downup") %>% distinct_all()

我以前遇到过类似的事情,但尽管它在填充单元格方面做得很好,但它给我留下了错误的行。我在下面给出了一个例子:

家庭 普通 物种 亚种
鹤科 NA NA NA NA
NA 鸵鸟 NA NA NA
NA NA NA NA
NA NA NA 骆驼 NA
NA NA NA NA 澳大利亚人
NA NA NA 钼磷 NA
鲇科 NA NA NA NA
NA 美洲狮 NA NA NA
NA NA 土卫六 NA NA
NA NA NA 美国 NA
NA NA NA NA 美国
NA NA NA NA 媒体

变成:

家庭 普通 物种 亚种
鹤科 鸵鸟 骆驼 澳大利亚人
鹤科 鸵鸟 骆驼 澳大利亚人
鹤科 鸵鸟 骆驼 澳大利亚人
鹤科 鸵鸟 骆驼 澳大利亚人
鹤科 鸵鸟 骆驼 澳大利亚人
鹤科 鸵鸟 钼磷 澳大利亚人
鲇科 鸵鸟 钼磷 澳大利亚人
鲇科 美洲狮 钼磷 澳大利亚人
鲇科 美洲狮 土卫六 钼磷 澳大利亚人
鲇科 美洲狮 土卫六 美国 澳大利亚人
鲇科 美洲狮 土卫六 美国 美国
鲇科 美洲狮 土卫六 美国 媒体

而不是:

家庭 普通 物种 亚种
鹤科 鸵鸟 骆驼 澳大利亚人
鹤科 鸵鸟 钼磷 NA
鲇科 美洲狮 土卫六 美国 美国
鲇科 美洲狮 土卫六 美国 媒体

简而言之,数据在运行,没有明确的方法来删除错误的行。

r conditional-statements fill
1个回答
0
投票
df %>%
   fill(family)%>%
   group_by(family)%>%
   fill(everything())%>%
   drop_na()

# A tibble: 4 × 5
# Groups:   family [2]
  family        common    genus    species       subspecies
  <chr>         <chr>     <chr>    <chr>         <chr>     
1 Struthionidae Ostriches Struthio camelus       australis 
2 Struthionidae Ostriches Struthio molybdophanes australis 
3 Rheaidae      Rheas     Rhea     americana     americana 
4 Rheaidae      Rheas     Rhea     americana     intermedia
© www.soinside.com 2019 - 2024. All rights reserved.