gpt4 book ai didi

r - 如何忽略整行 NA 之后并包括整行 NA 的所有行?

转载 作者:行者123 更新时间:2023-12-02 09:13:36 26 4
gpt4 key购买 nike

我问这个问题的原因是因为我在一个实验室工作,我的同事在 Microsoft-Excel 电子表格中进行一些分析。有时我会在电子表格列的底部找到 Microsoft Excel 分析表。为了我的目的,我可以轻松地将这些电子表格读入 R。这种模式是,电子表格中总是至少有一整行空单元格或 NA,因此任何跟随并包含一整行 NA 的内容都不应该被解释为 R,因为它不是原始数据。

想象一个像这样的简单的数字数据框(df)。

我添加了一个“#”来显示我想要排除的行。

    x  y  z  comments
1 8 5 4 <NA>
2 3 6 5 <NA>
3 7 7 3 <NA>
4 9 3 10 Well
5 4 NA 6 <NA>
6 5 9 8 <NA>
7 1 4 7 Yeah
8 10 2 2 <NA>
9 2 10 9 <NA>
10 6 1 1 I guess
11 NA NA NA <NA> # whole row of NAs/empty cells. # exclude
12 8 3 4 Summary # exclude
13 1 1 2 <NA> # exclude
14 NA NA NA <NA> # exclude

如果我只是排除包含 NA 的所有行,我会丢失很多信息:

print(na.omit(df))
x y z comments
4 9 3 10 Well
7 1 4 7 Yeah
10 6 1 1 I guess

我不想忽略这些评论,因为它们可能完整,也可能不完整。

但是看到整行 NA(在本示例中出现在第 11 行中)表明要排除以下行,因此我想要包含的电子表格包含以下内容:

    x  y  z comments
1 8 5 4 <NA>
2 3 6 5 <NA>
3 7 7 3 <NA>
4 9 3 10 Well
5 4 NA 6 <NA>
6 5 9 8 <NA>
7 1 4 7 Yeah
8 10 2 2 <NA>
9 2 10 9 <NA>
10 6 1 1 I guess

这只是这里的模拟数据,但我必须经常这样做,所以这是我向您展示的模拟数据:

structure(list(x = c(8, 3, 7, 9, 4, 5, 1, 10, 2, 6, NA, 8, 1, 
NA), y = c(5, 6, 7, 3, NA, 9, 4, 2, 10, 1, NA, 3, 1, NA), z = c(4,
5, 3, 10, 6, 8, 7, 2, 9, 1, NA, 4, 2, NA), comments = c(NA, NA,
NA, "Well", NA, NA, "Yeah", NA, NA, "I guess ", NA, "Summary",
NA, NA)), .Names = c("x", "y", "z", "comments"), row.names = c(NA,
14L), class = "data.frame")

如何排除任何类型的数据框中包含和跟随整行 NA(空单元格)的所有行?

谢谢。

最佳答案

我们可以使用 Reduce& 来创建一个逻辑向量来对数据集进行子集化

df[!cumsum(Reduce(`&`, lapply(df, is.na))),]
# x y z comments
#1 8 5 4 <NA>
#2 3 6 5 <NA>
#3 7 7 3 <NA>
#4 9 3 10 Well
#5 4 NA 6 <NA>
#6 5 9 8 <NA>
#7 1 4 7 Yeah
#8 10 2 2 <NA>
#9 2 10 9 <NA>
#10 6 1 1 I guess

关于r - 如何忽略整行 NA 之后并包括整行 NA 的所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49293099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com