【问题标题】:Selecting/subsetting blank and non-blank rows with a vector [duplicate]使用向量选择/设置空白和非空白行[重复]
【发布时间】:2019-01-18 22:40:01
【问题描述】:

我想使用具有空白 ("") 和非空白字符串的向量来对行进行子集化,以便最终得到类似于 dfgoal 的结果。

我已尝试使用 dplyr::select(),但收到错误消息 (Error: Strings must match column names. Unknown columns: tooth, , head, foot)。

我意识到我有一个问题,我想保留一些“”并摆脱其他的,但我不知道如何解决它。

感谢您的帮助!

# Data
df <- data.frame(avar=c("tooth","","","head","","foot","",""),bvar=c(1:8))

# Vector 
veca <- c("tooth","foot") 
vecb <- c("") 
vecc <- as.vector(rbind(veca,vecb)) 
vecc <- unique(vecc) 

# Attempt 
library(dplyr)
df <- df %>% dplyr::select(vecc)

# Goal 
dfgoal <- data.frame(avar=c("tooth","","","foot","",""),bvar=c(1,2,3,6,7,8)) 

【问题讨论】:

  • 也许您希望 dplyr::filter 对行进行子集化并使用 avar %in% c(...) - 比如 df %&gt;% filter(avar %in% vecc)
  • .... 因为select 用于选择变量(即列)。

标签: r dplyr


【解决方案1】:

我并不完全清楚你想要做什么。我假设您在问如何选择 avar %in% veca 包括后续空白 ("") 行的行。

也许像这样使用tidyr::fill

library(tidyverse)
veca <- c("tooth","foot")
df %>%
    mutate(tmp = ifelse(avar == "", NA, as.character(avar))) %>%
    fill(tmp) %>%
    filter(tmp %in% veca) %>%
    select(-tmp)
#  avar bvar
#1 tooth    1
#2          2
#3          3
#4  foot    6
#5          7
#6          8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 2019-10-04
    • 2016-10-04
    • 1970-01-01
    • 2022-01-23
    • 2019-08-20
    相关资源
    最近更新 更多