具有小于特定值的观察值的丢弃因子-R

时间:2016-03-30 19:36:29

标签: r filtering r-factor

让我有这样的数据框(df1)与因子:

factor1  factor2  factor3
-------  -------  -------
d        a         x
d        a         x
b        a         x
b        c         x
b        c         y
c        c         y
c        n         y
c        n         y
c        n         y

我想从这个数据框中删除一个元素少于3个观察值的因子。

在此数据帧中,factor1有3个级别(d,b和c)。但是d级别的频率为2.所以我想从这个数据帧中删除factor1。

结果数据框应为:

factor2  factor3
-------  -------
a         x
a         x
a         x
c         x
c         y
c         y
n         y
n         y
n         y

如何使用R执行此操作?我会很高兴得到任何帮助。非常感谢。

4 个答案:

答案 0 :(得分:2)

您可以尝试使用lapplytable

df1[, lapply(c(1,2,3), FUN = function(x) min(table(df1[,x]))) >= 3]

,更通用一点:

df1[, lapply(1:ncol(df1), FUN = function(x) min(table(df1[,x]))) >= 3]

答案 1 :(得分:1)

是你想要的吗?

//Create file. Use UTF-8 to encode the file
CTextFileWrite myfile(_T("samplefile.txt"), 
            CTextFileWrite::UTF_8 );

ASSERT(myfile.IsOpen());

//Write some text
myfile << "Using 8 bit characters as input";
myfile.WriteEndl();
myfile << L"Using 16-bit characters. The following character is alfa: \x03b1";
myfile.WriteEndl();
CString temp = _T("Using CString.");
myfile << temp;

答案 2 :(得分:1)

我们可以使用Filter

Filter(function(x) min(nlevels(x))>2, df1)

(基于其中一个投票帖子中的结果)

或者也可以

Filter(function(x) min(tabulate(x))>2, df1)

答案 3 :(得分:0)

我会创建一个快速帮助函数,通过快速调用table()来检查每个级别的唯一实例数量 - 查看table(df$fac1)以查看其工作原理。请注意,这不是很强大,但应该让你开始:

df <- data.frame(fac1 = factor(c("d", "d", "b", "b", "b", "c", "c", "c", "c")),
                 fac2 = factor(c("a", "a", "a", "c", "c", "c", "n", "n", "n")),
                 fac3 = factor(c(rep("x", 4), rep("y", 5))),
                 other = 1:9)

at_least_three_instances <- function(column) {
  if (is.factor(column)) {
    if (min(table(column)) > 2) {
      return(TRUE)
    } else {
      return(FALSE)
    }
  } else {
    return(TRUE)
  }
}

df[unlist(lapply(df, at_least_three_instances))]