Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何用“删除”删除所有单元格;不适用;按列列出的值_R - Fatal编程技术网

R 如何用“删除”删除所有单元格;不适用;按列列出的值

R 如何用“删除”删除所有单元格;不适用;按列列出的值,r,R,这个问题不是重复的,因为我的data.frame并非所有列中的NA值都相同,因此该问题中提到的解决方案不起作用 我有一个data.frame,其中包含大量的NA值,我想删除所有具有NA值的单元格(重要信息:不是行或列,而是单元格)。原图如下所示: A B 1 NA NA 2 2 NA NA NA NA NA NA 4 3 5 A B 1 2 2 4 3 5 预期结果如下所示: A B 1 NA NA 2 2 NA NA NA NA NA NA 4 3 5 A B

这个问题不是重复的,因为我的
data.frame
并非所有列中的
NA
值都相同,因此该问题中提到的解决方案不起作用

我有一个
data.frame
,其中包含大量的
NA
值,我想删除所有具有NA值的单元格(重要信息:不是行或列,而是单元格)。原图如下所示:

A  B
1  NA
NA 2
2  NA
NA NA
NA NA
NA 4
3  5
A  B
1  2
2  4 
3  5
预期结果如下所示:

A  B
1  NA
NA 2
2  NA
NA NA
NA NA
NA 4
3  5
A  B
1  2
2  4 
3  5
列数必须保持不变,但值是否保留在相同的行上并不重要。他们可以向上移动

我可以想象一个人可以删除所有条件为NA的单元格(可能是应用),然后得到结果。或者简单的分类

谢谢

更新:

A   B   C
1       3
    2   
4       3

    1   2

3       5
        4
    9   
7       1

您可以根据@UweBlock的数据和您更新的问题进行尝试

dat=as.data.frame(na.omit(apply(dat,2,function (x) x[order(is.na(x))])))

dat
  A B C
1 1 2 3
2 4 1 3
3 3 9 2

OP已要求按列删除
NA
s,但指出每列中可能有不同数量的NA

这可以通过使用
数据来解决。表
分两步进行:

library(data.table)
# step 1: coerce to data.table in place, move NAs to the bottom of each column, 
# maintain the original order of non-NA values
result <- data.table(DF)[, lapply(.SD, function(x) x[order(is.na(x))])]
因此,在每个列mn的末尾将不可避免地出现一些
NA
s,因为data.frame中的所有列都具有相同的长度

或者,使用
is.na
参数到
na.trim()
,只能保留完整的行:

另一种解决办法 如前所述,
data.frame
s和
cbind()
期望所有列向量具有相同的长度。这是一个没有
数据的替代解决方案。表
使用
rowr
包中的
cbind.fill()
函数,该函数使用
fill
值填充向量,直到长度相同:

setNames(do.call(function(...) rowr::cbind.fill(..., fill = NA), lapply(DF, na.omit)),
         colnames(DF))
资料 由OP在更新中提供:

DF <- structure(list(A = c(1L, NA, 4L, NA, NA, NA, 3L, NA, NA, 7L), 
    B = c(NA, 2L, NA, NA, 1L, NA, NA, NA, 9L, NA), C = c(3L, 
    NA, 3L, NA, 2L, NA, 5L, 4L, NA, 1L)), .Names = c("A", "B", 
"C"), row.names = c(NA, -10L), class = "data.frame")

dftry
data.frame(lappy(df1,na.omit))
每列的na数是否相同?否则,您将遇到问题bc data.frames需要具有相同长度的列。您可以只使用普通列表。不,有很多NAs和很少的实际值,它们不是相同的数字。谢谢您的帮助。使用此选项后,我得到一个空变量/文件。初始数据是否需要转换为任何特定的数据(data.frame、list、matrix)?或者我在这里遗漏了什么。@user413734我假设您正在处理数据。frameYes我遗漏了。运行代码后,我在Rstudio的环境面板中获得chr[0,1:255]。我的原始数据中有255列。在此之前的所有转换都显示相同数量的列和行。这段代码似乎删除了NA所在的所有行以及列中出现的所有NA。你知道我还能尝试什么吗。感谢您的帮助。我刚刚用更新的示例文件尝试了您的代码,尽管它在原则上达到了预期效果,但它忽略了A行中的值7和C行中的值5、4、1。我相信它必须是相同数量的值(3)。但对我来说,行是否保留在原始文件中并不重要。@UweBlock阅读更新的问题并编辑我的答案~谢谢你的帮助~:)
   A B C
1: 1 2 3
2: 4 1 3
3: 3 9 2
setNames(do.call(function(...) rowr::cbind.fill(..., fill = NA), lapply(DF, na.omit)),
         colnames(DF))
   A  B C
1  1  2 3
2  4  1 3
3  3  9 2
4  7 NA 5
5 NA NA 4
6 NA NA 1
DF <- structure(list(A = c(1L, NA, 4L, NA, NA, NA, 3L, NA, NA, 7L), 
    B = c(NA, 2L, NA, NA, 1L, NA, NA, NA, 9L, NA), C = c(3L, 
    NA, 3L, NA, 2L, NA, 5L, 4L, NA, 1L)), .Names = c("A", "B", 
"C"), row.names = c(NA, -10L), class = "data.frame")