从数据集中删除重复项后无法保留所有变量
Having trouble keeping all variables after removing duplicates from a dataset
因此,我导入了一个包含 178 个观测值和 8 个变量的数据集。然后最终目标是消除所有在其中三个变量(2、5 和 6)中相同的观察结果。使用独特的命令证明这很容易。
mav2 <- unique(mav[,c(2,5,6)])
生成的 mav2
数据框产生了 55 个观察值,去除了所有重复项!不幸的是,它也去掉了我在 unique 命令中没有使用的其他五个变量(1、3、4、7 和 8)。我最初尝试添加两个数据框,当然这不起作用,因为它们的大小不相等。我也尝试过将两者合并,但这失败了,只给出了第一个数据集的输出和所有 178 个观察结果。
第二个数据集 (mav2
) 确实生成了一个新列 (row.names
),它是初始数据集中每个观察值的行号。
如果有人能帮助我将所有 8 个初始变量放入仅包含 55 个独特观察值的数据集中,我将不胜感激。提前致谢。
我想你想要的是duplicated
,一个类似于unique
的函数,returns重复元素的索引。
所以
mav2 <- mav[!duplicated(mav[,c(2,5,6)]),]
编辑:duplicated
的反转意义
你可以试试这个
mav$key <- 1:nrow(mav)
mav2 <- unique(mav[,c(2,5,6)])
mav_unique <- mav[mav$key%in%mav2$key,]
mav_unique$key <- NULL
编辑:解决关键问题
rownames(mav) <- 1:nrow(mav) #to make sure they are correctly set
mav2 <- unique(mav[,c(2,5,6)])
mav_unique <- mav[rownames(mav)%in%rownames(mav2),]
你可以试试这个。
mav[!(mav$v2==mav$v5 & mav$v5==mav$v6),]
示例:
mav <- data.frame(v1=c(1,2,3),v2=c(2,6,4),v3=c(4,5,6),v4=c(1,5,2),v5=c(5,6,7),v6=c(5,6,8),v7=c(7,4,5),v8=c(6,3,1))
mav
v1 v2 v3 v4 v5 v6 v7 v8
1 1 2 4 1 5 5 7 6
2 2 6 5 5 6 6 4 3
3 3 4 6 2 7 8 5 1
现在在上面的数据框中,v2、v5、v6 列的第 2 行具有相同的值 6。
执行以下操作。
mav <- mav[!(mav$v2==mav$v5 & mav$v5==mav$v6),]
给你
mav
v1 v2 v3 v4 v5 v6 v7 v8
1 1 2 4 1 5 5 7 6
3 3 4 6 2 7 8 5 1
保留所有其他列。
因此,我导入了一个包含 178 个观测值和 8 个变量的数据集。然后最终目标是消除所有在其中三个变量(2、5 和 6)中相同的观察结果。使用独特的命令证明这很容易。
mav2 <- unique(mav[,c(2,5,6)])
生成的 mav2
数据框产生了 55 个观察值,去除了所有重复项!不幸的是,它也去掉了我在 unique 命令中没有使用的其他五个变量(1、3、4、7 和 8)。我最初尝试添加两个数据框,当然这不起作用,因为它们的大小不相等。我也尝试过将两者合并,但这失败了,只给出了第一个数据集的输出和所有 178 个观察结果。
第二个数据集 (mav2
) 确实生成了一个新列 (row.names
),它是初始数据集中每个观察值的行号。
如果有人能帮助我将所有 8 个初始变量放入仅包含 55 个独特观察值的数据集中,我将不胜感激。提前致谢。
我想你想要的是duplicated
,一个类似于unique
的函数,returns重复元素的索引。
所以
mav2 <- mav[!duplicated(mav[,c(2,5,6)]),]
编辑:duplicated
你可以试试这个
mav$key <- 1:nrow(mav)
mav2 <- unique(mav[,c(2,5,6)])
mav_unique <- mav[mav$key%in%mav2$key,]
mav_unique$key <- NULL
编辑:解决关键问题
rownames(mav) <- 1:nrow(mav) #to make sure they are correctly set
mav2 <- unique(mav[,c(2,5,6)])
mav_unique <- mav[rownames(mav)%in%rownames(mav2),]
你可以试试这个。
mav[!(mav$v2==mav$v5 & mav$v5==mav$v6),]
示例:
mav <- data.frame(v1=c(1,2,3),v2=c(2,6,4),v3=c(4,5,6),v4=c(1,5,2),v5=c(5,6,7),v6=c(5,6,8),v7=c(7,4,5),v8=c(6,3,1))
mav
v1 v2 v3 v4 v5 v6 v7 v8
1 1 2 4 1 5 5 7 6
2 2 6 5 5 6 6 4 3
3 3 4 6 2 7 8 5 1
现在在上面的数据框中,v2、v5、v6 列的第 2 行具有相同的值 6。
执行以下操作。
mav <- mav[!(mav$v2==mav$v5 & mav$v5==mav$v6),]
给你
mav
v1 v2 v3 v4 v5 v6 v7 v8
1 1 2 4 1 5 5 7 6
3 3 4 6 2 7 8 5 1
保留所有其他列。