将重复元素保留一次,并将整个数据帧保留在r中
我希望基于第一列中的repeated元素删除行,但也希望保留第二列。我可以使用第二列中和repeated元素关联的任何值 输入:将重复元素保留一次,并将整个数据帧保留在r中,r,dplyr,R,Dplyr,我希望基于第一列中的repeated元素删除行,但也希望保留第二列。我可以使用第二列中和repeated元素关联的任何值 输入: df = data.frame(col1 = c("a", "a", "a", "b", "b", "c"), col2 = 1:6) 预期产出: col1 col2 a 1 b 4 或者 等等 到目前为止,已尝试使用以下命令,但未保留整个数据帧: df[(duplicated(df$col1)),] 以下操作应满足您的要求: > df =
df = data.frame(col1 = c("a", "a", "a", "b", "b", "c"), col2 = 1:6)
预期产出:
col1 col2
a 1
b 4
或者
等等
到目前为止,已尝试使用以下命令,但未保留整个数据帧:
df[(duplicated(df$col1)),]
以下操作应满足您的要求:
> df = data.frame(col1 = c("a", "a", "a", "b", "b", "c"), col2 = 1:6)
> t <- table(df[,1])
> df[match(names(t[t>1]),df[,1]),]
col1 col2
1 a 1
4 b 4
df=data.frame(col1=c(“a”、“a”、“a”、“b”、“b”、“c”),col2=1:6)
>t df[匹配(名称(t[t>1]),df[,1]),]
col1 col2
1 a 1
4 b 4
简要说明:
table(…)
统计每个元素在第一列中出现的次数<代码>名称(t[t>1])仅选择至少出现两次的名称,并且匹配(…)
给出所述元素的(第一)索引。最后,选择与这些索引对应的行。以下操作应满足您的要求:
> df = data.frame(col1 = c("a", "a", "a", "b", "b", "c"), col2 = 1:6)
> t <- table(df[,1])
> df[match(names(t[t>1]),df[,1]),]
col1 col2
1 a 1
4 b 4
df=data.frame(col1=c(“a”、“a”、“a”、“b”、“b”、“c”),col2=1:6)
>t df[匹配(名称(t[t>1]),df[,1]),]
col1 col2
1 a 1
4 b 4
简要说明:
table(…)
统计每个元素在第一列中出现的次数<代码>名称(t[t>1])仅选择至少出现两次的名称,并且匹配(…)
给出所述元素的(第一)索引。最后选择与这些索引相对应的行。我们可以使用data.table执行此操作。将“data.frame”转换为“data.table”(setDT(df)
),按“col1”分组,如果行数大于1,则获取第一行
library(data.table)
setDT(df)[, if(.N>1) head(.SD, 1) , col1]
# col1 col2
#1: a 1
#2: b 4
如果我们需要第二个值
setDT(df)[, if(.N>1) .SD[2] , col1]
# col1 col2
#1: a 2
#2: b 5
或者使用dplyr
library(dplyr)
df %>%
group_by(col1) %>%
filter(n()>1 & row_number()==1)
# col1 col2
# <fctr> <int>
#1 a 1
#2 b 4
df %>%
group_by(col1) %>%
filter(n() > 1) %>%
filter(row_number() == 1)
库(dplyr)
df%>%
分组依据(col1)%>%
过滤器(n()>1&行数()==1)
#col1 col2
#
#1 a 1
#2 b 4
我们可以使用数据表来实现这一点。将“data.frame”转换为“data.table”(setDT(df)
),按“col1”分组,如果行数大于1,则获取第一行
library(data.table)
setDT(df)[, if(.N>1) head(.SD, 1) , col1]
# col1 col2
#1: a 1
#2: b 4
如果我们需要第二个值
setDT(df)[, if(.N>1) .SD[2] , col1]
# col1 col2
#1: a 2
#2: b 5
或者使用dplyr
library(dplyr)
df %>%
group_by(col1) %>%
filter(n()>1 & row_number()==1)
# col1 col2
# <fctr> <int>
#1 a 1
#2 b 4
df %>%
group_by(col1) %>%
filter(n() > 1) %>%
filter(row_number() == 1)
库(dplyr)
df%>%
分组依据(col1)%>%
过滤器(n()>1&行数()==1)
#col1 col2
#
#1 a 1
#2 b 4
使用dplyr
我们可以按
col1
分组,然后只包括那些出现多次的组,并使用切片
library(dplyr)
df %>%
group_by(col1) %>%
filter(n() > 1) %>%
slice(1)
# col1 col2
# <fctr> <int>
#1 a 1
#2 b 4
使用dplyr
我们可以按col1
分组,然后只包括那些出现多次的组,并通过切片获得第一行
library(dplyr)
df %>%
group_by(col1) %>%
filter(n() > 1) %>%
slice(1)
# col1 col2
# <fctr> <int>
#1 a 1
#2 b 4
谢谢@Jonathan,我也不想要第六排。查看我的预期输出。所以您只需要重复两次或更多次的输出?是的,完全正确@乔纳森·汉克斯@乔纳森,我也不想要第六排。查看我的预期输出。所以您只需要重复两次或更多次的输出?是的,完全正确@乔纳森