我有8列变量,我必须保留第1列到第3列。对于第4到第8列,我需要保留那些只有3级且丢弃不符合条件的那些。
我尝试了以下命令
data3 <- data2[,sapply(data2,function(col)length(unique(col)))==3]
它设法保留3个级别的变量,但删除了我的前3列。
答案 0 :(得分:1)
您可以执行两个步骤:
all =TRUE
根据您希望的输出结果,可以尝试使用merge()
中的选项m_imageFile = QFileDialog::getOpenFileName(this, tr("Open Image"), QDir::homePath(), tr("Image Files (*.png *.jpg *.bmp)"), 0, QFileDialog::DontUseNativeDialog); //works
。
答案 1 :(得分:1)
我建议采用另一种方法:
x = 1:3
cbind(data2[x], Filter(function(i) length(unique(i))==3, data2[-x]))
# 1 2 3 5
#1 a 1 3 b
#2 b 2 4 b
#3 c 3 5 b
#4 d 4 6 a
#5 e 5 7 c
#6 f 6 8 c
#7 g 7 9 c
#8 h 8 10 a
#9 i 9 11 c
#10 j 10 12 b
数据:强>
data2 = setNames(
data.frame(letters[1:10],
1:10,
3:12,
sample(letters[1:10],10, replace=T),
sample(letters[1:3],10, replace=T)),
1:5)
答案 2 :(得分:0)
假设列4:8是factor
类,我们也可以使用nlevels
到filter
列。我们创造了'toKeep&#39;作为要保留的列的数字索引,以及&#39; toFilter&#39;作为filter
列的数字索引。我们将数据集分为两部分:1)使用&#39; toKeep&#39;作为索引(data2[toKeep]
),2)使用&#39; toFilter&#39;,我们通过使用sapply
循环来进一步对数据集进行子集化以查找级别数(nlevels
) ,创建逻辑索引(==3
)到filter
列,cbind
创建第一个子集。
toKeep <- 1:3
toFilter <- setdiff(seq_len(ncol(data2)), n)
cbind(data2[toKeep], data2[toFilter][sapply(data2[toFilter], nlevels)==3])
# V1 V2 V3 V4 V6
#1 B B D C B
#2 B D D A B
#3 D E B A B
#4 C B E C A
#5 D D A D E
#6 E B A A B
set.seed(24)
data2 <- as.data.frame(matrix(sample(LETTERS[1:5], 8*6, replace=TRUE), ncol=8))