【发布时间】:2016-04-26 11:05:34
【问题描述】:
我必须删除包含超过 4000 列和 180 行的数据框中的列。我要设置以删除数据框中的列的条件是: (i) 如果该列中的值/条目少于两个,则删除该列 (ii) 如果没有两个连续的列(一个接一个),则删除该列 列中的值。 (iii) 删除所有值为 NA 的列。 我已经提供了删除列的条件。此处的目的不仅仅是像“如何删除 data.table 中的列?”那样按名称查找列。 我说明如下:
A B C D E
0.018 NA NA NA NA
0.017 NA NA NA NA
0.019 NA NA NA NA
0.018 0.034 NA NA NA
0.018 NA NA NA NA
0.015 NA NA NA 0.037
0.016 NA NA NA 0.031
0.019 NA 0.4 NA 0.025
0.016 0.03 NA NA 0.035
0.018 NA NA NA 0.035
0.017 NA NA NA 0.043
0.023 NA NA NA 0.040
0.022 NA NA NA 0.042
所需的数据框:
A E
0.018 NA
0.017 NA
0.019 NA
0.018 NA
0.018 NA
0.015 0.037
0.016 0.031
0.019 0.025
0.016 0.035
0.018 0.035
0.017 0.043
0.023 0.040
0.022 0.042
如何将这三个条件合并到一个代码中。我将感谢您在这方面的帮助。 可重现的例子
structure(list(Month = c("Jan-2000", "Feb-2000", "Mar-2000",
"Apr-2000", "May-2000", "Jun-2000"), A.G.L.SJ.INVS...LON..DEAD...13.08.15 = c(NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), ABACUS.GROUP.DEAD...18.02.09 = c(0.00829384766220866,
0.00332213653674028, 0, 0, NA, NA), ABB.R..IRS. = c(NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_)), .Names = c("Month",
"A.G.L.SJ.INVS...LON..DEAD...13.08.15", "ABACUS.GROUP.DEAD...18.02.09",
"ABB.R..IRS."), class = c("data.table", "data.frame"), row.names = c(NA,
-6L), .internal.selfref = <pointer: 0x0000000001c90788>)
【问题讨论】:
-
对于(i):
df[,sapply(df, function(x) sum(!is.na(x))>1)] -
@Frank 此处删除列是基于条件而不是名称。
-
@Aquarius 在链接的q中,这些也是条件。它们只是基于名称而不是值向量的条件。我不认为它有本质上的不同。我也认为目标链接很有帮助,因为它显示了
:= NULL,这是如何通过引用删除列(而不是创建一个全新的表)。 -
@Frank 好吧,我认为这里的决定有点苛刻。
-
你不应该这样看。问一个被标记为欺骗的问题并没有错。骗子和他们的回答也对网站有帮助(因为人们也可以在谷歌搜索结果中找到你的问题)。我认为,标记为骗子只会更容易找到相关问题。这是该网站的联合创始人关于它的博客文章:blog.stackoverflow.com/2010/11/…
标签: r dataframe data.table multiple-columns