删除“细胞”与NA和列
问题描述:
我有这样的数据集:删除“细胞”与NA和列
df<- structure(list(p1 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA), p2 = structure(c(NA, NA, 5L, 6L,
NA, 2L, 7L, NA, NA, 4L, NA, 3L, NA, 1L, 1L, 1L, 1L), .Label = c("",
"R16", "R29", "R3", "R36", "R40", "R56"), class = "factor"),
p3 = structure(c(NA, 1L, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA), .Label = "R33", class = "factor")), .Names = c("p1",
"p2", "p3"), class = "data.frame", row.names = c(NA, -17L))
我想删除“细胞”不包含呐行。
我尝试这样做:
na.omit(df)
但这不是工作,我猜是因为它是整行。
如何从细胞中去除NA而不是整行?
输出示例:
p2 p3
R36 R33
R40
R16
R56
R3
R29
答
你不能做的是,当该对象是因为一个数据帧的数据帧是相等长度的列表对象束。所以一个数据框基本上是一个格式化的列表!而你的输出要求列表项目的长度不一样。
因此,首先应该将数据帧lapply转换成一个列表,然后在列表中的项目:
dfl <- as.list(df)
dfn <- lapply(dfl, function(x) x[!is.na(x)])
,输出是:
> dfn
$p1
logical(0)
$p2
[1] R36 R40 R16 R56 R3 R29
Levels: R16 R29 R3 R36 R40 R56
$p3
[1] R33
Levels: R33
当您尝试将它转换成数据帧:
> as.data.frame(dfn)
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, :
arguments imply differing number of rows: 0, 10, 1
为什么要删除'NA'?无论如何,如果你想要推断空字符值,你可以这样做:''df [is.na(df)] Jaap
也许你想要做'lapply(as.list(df),function(x) x [!is.na(x)])' –
@amatsuo_net,抱歉,我在发布我的答案后看到了您的评论。常识走向同一个方向。 –