r - 获取与行长度不均匀的条件匹配的数据帧行

标签 r dataframe subset

假设有一个行长度不均匀且列未知的数据帧 - 即每行的长度可能不同,但所有 NA 值始终位于末尾。还有三个值:startpenultimatelast

问题:如何(优雅地,无需嵌套循环)查找数据框中符合该条件的所有行?

示例:对于以下数据框和值:

df <- structure(list(V1 = c("a", "a", "a", "a", "b"), V2 = c("b", "n", "t", "o", "l"), V3 = c("c", "m", "h", "j", "p"), V4 = c("d", "c", "j", "", "e"), V5 = c("", "d", "", "", "")), 
.Names = c("V1", "V2", "V3", "V4", "V5"), 
row.names = c(NA, 5L), class = "data.frame")
df[df == ""] <- NA

start <- "a"
penultimate <- "c"
last <- "d"

所需的输出将是以下子集:

  V1 V2 V3 V4   V5
1  a  b  c  d  [NA]
2  a  n  m  c   d

最佳答案

我设法通过 applyMARGIN=1 解决了这个问题,但是,我怀疑它的效率。

df[apply(df, 1, function(x) {
    temp = x[!is.na(x)]
    temp[1] == start & tail(temp, 1) == last & tail(temp, 2)[1] == penultimate
}), ]

#  V1 V2 V3 V4   V5
#1  a  b  c  d <NA>
#2  a  n  m  c    d

对于每一行,我们首先删除所有 NA 元素,然后检查条件(startlastpenultimate)并使用 bool 索引对行进行子集化。

关于r - 获取与行长度不均匀的条件匹配的数据帧行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49901315/

相关文章:

r - 从数据框中提取具有最高值和最低值的行

r - 如何在 R 中通过网络检测远程文件夹中新添加的文件?

r - 如何在 Shiny 中读取 csv 文件?

r - R中是否有内置的序数序列向量?

python - 将排名有序的列添加到 Pandas Dataframe

python - 在 Pandas 分析报告中显示 "Other Values"

r - 如何删除r数据框中的多列?

r - 如何计算 r 中数据框中的特定子集并将计算保存在另一个列表中

子功能中的 R 模式

python - 从 python 数据框的列构造二分图