让我有这样的数据框(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执行此操作?我会很高兴得到任何帮助。非常感谢。
答案 0 :(得分:2)
您可以尝试使用lapply
和table
:
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))]