Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R子集行,其中多列中的值不';不匹配_R - Fatal编程技术网

R子集行,其中多列中的值不';不匹配

R子集行,其中多列中的值不';不匹配,r,R,如果已经有人问过我,我表示歉意,但是我搜索了一下,没有找到一个确切的例子来说明我正在尝试做什么。我试图对数据帧进行子集划分,以排除在五列中具有匹配数值的行。例如,对于下面的数据帧df,我只想返回一个包含第1:2、5:6和8:10行的新数据帧: Row A B C D E 1 1 1 2 3 1 2 4 1 2 3 5 3 2 2 2 2 2 4 5 5 5 5 5 5 4 4 2 3

如果已经有人问过我,我表示歉意,但是我搜索了一下,没有找到一个确切的例子来说明我正在尝试做什么。我试图对数据帧进行子集划分,以排除在五列中具有匹配数值的行。例如,对于下面的数据帧df,我只想返回一个包含第1:2、5:6和8:10行的新数据帧:

Row A   B   C   D   E
1   1   1   2   3   1
2   4   1   2   3   5
3   2   2   2   2   2
4   5   5   5   5   5
5   4   4   2   3   4
6   2   1   3   5   2
7   3   3   3   3   3
8   3   2   5   3   3
9   2   1   2   2   4
10  3   3   3   2   3
我在两个以上的专栏中都很难找到这样做的方法。我试过以下方法,知道它们不对

df2 <- df[!duplicated(df, c("A", "B", "C", "D", "E"))]

df2数据帧通常是按列而不是按行操作的,这就是为什么您的
duplicated
尝试不起作用的原因。(它正在检查这些列中的重复行。)而您的
==
不起作用,因为
=
是一个二进制运算符,
df$a==df$B
将为真或假,然后
(df$a==df$B)==df$C
(隐含括号)将测试
df$C
是真还是假

apply
是在每行上运行函数的好方法。它会将您的数据帧转换为一个矩阵来运行函数,但在这种情况下,a到E列都是数字。这里有一个方法:

df[apply(df[, -1], 1, function(x) length(unique(x))) > 1, ]
#    Row A B C D E
# 1    1 1 1 2 3 1
# 2    2 4 1 2 3 5
# 5    5 4 4 2 3 4
# 6    6 2 1 3 5 2
# 8    8 3 2 5 3 3
# 9    9 2 1 2 2 4
# 10  10 3 3 3 2 3
您可以使用各种不同的函数来应用
,以测试所有元素是否相同

我假设您实际上有一个名为行的列。如果不是这样,请在上面的代码中省略
-1


使用此数据,可与
dput()
重复共享


您可以简单地将所有列与单个列进行比较,看看是否都相同

df[rowSums(df[-1] == df[, 1]) < (ncol(df) - 1), ]
#    A B C D E
# 1  1 1 2 3 1
# 2  4 1 2 3 5
# 5  4 4 2 3 4
# 6  2 1 3 5 2
# 8  3 2 5 3 3
# 9  2 1 2 2 4
# 10 3 3 3 2 3

非常感谢。这正是我所需要的。
df = structure(list(Row = 1:10, A = c(1L, 4L, 2L, 5L, 4L, 2L, 3L, 
3L, 2L, 3L), B = c(1L, 1L, 2L, 5L, 4L, 1L, 3L, 2L, 1L, 3L), C = c(2L, 
2L, 2L, 5L, 2L, 3L, 3L, 5L, 2L, 3L), D = c(3L, 3L, 2L, 5L, 3L, 
5L, 3L, 3L, 2L, 2L), E = c(1L, 5L, 2L, 5L, 4L, 2L, 3L, 3L, 4L, 
3L)), .Names = c("Row", "A", "B", "C", "D", "E"), class = "data.frame", row.names = c(NA, 
-10L))
df[rowSums(df[-1] == df[, 1]) < (ncol(df) - 1), ]
#    A B C D E
# 1  1 1 2 3 1
# 2  4 1 2 3 5
# 5  4 4 2 3 4
# 6  2 1 3 5 2
# 8  3 2 5 3 3
# 9  2 1 2 2 4
# 10 3 3 3 2 3
df[!Reduce("&" , lapply(df, `==`, df[, 1])), ]
#    A B C D E
# 1  1 1 2 3 1
# 2  4 1 2 3 5
# 5  4 4 2 3 4
# 6  2 1 3 5 2
# 8  3 2 5 3 3
# 9  2 1 2 2 4
# 10 3 3 3 2 3