我有一个包含许多重复行的数据集,我想仅隔离非重复值。我的 df 看起来像这样
df <- data.frame("group" = c("A", "A", "A","A","A","B","B","B"),
"id" = c("id1", "id2", "id3", "id1", "id2","id1","id2","id1"),
"Val" = c(10,10,10,10,10,12,12,12))
Run Code Online (Sandbox Code Playgroud)
我想提取的只是没有重复的行。即我的最终数据集应该如下所示
final <- data.frame("group" = c("A","B"),
"id" = c("id3","id2"),
"Val" = c(10,12))
Run Code Online (Sandbox Code Playgroud)
请注意,我对查找唯一值不感兴趣,而是对不重复的值感兴趣。我知道如何找到独特的价值,例如df %>% distinct()
做这份工作。它正在区分我正在努力解决的非重复行
我有一个看起来像这样的数据集,
df<-structure(list(Year = c(1985L, 1986L, 1987L, 1988L, 1989L, 1990L,
1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L,2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 1985L, 1986L, 1987L, 1988L, 1989L, 1990L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 1985L, 1986L, 1987L, 1988L, 1989L, 1990L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, …
Run Code Online (Sandbox Code Playgroud) 我有两个 df 看起来像这样
library(tidyverse)
iris <- iris%>% mutate_at((1:4),~.+2)
iris2 <- iris
names(iris2)<-sub(".", "_", names(iris2), fixed = TRUE)
Run Code Online (Sandbox Code Playgroud)
我的目标是减少iris
高于相应变量 iniris2
的最大值的变量值,以匹配 中的最大值iris2
。
我写了一个函数来做到这一点。
max(iris$Sepal.Length)
[1] 9.9
max(iris2$Sepal_Length)
[1] 7.9
# i want every value of iris that is >= to max value of iris2 to be equal to the max value of iris 2.
# my function:
fixmax<- function(data,data2,var1,var2) {
data<- data %>%
mutate("{var1}" := ifelse(get(var1)>=max(data2[[var2]],na.rm = T),
max(data2[[var2]],na.rm = T),get(var1)))
return(data)
}
# apply my …
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的数据集。
df <- tibble::tribble(
~name, ~x, ~y, ~z,
"N/A", 1, "testSmith", -100,
"N A", 3, "NOt available", -99,
"test Smith", NA, "test Smith", -98,
"Not Available", -99, "25", -101,
"test Smith", -98, "28", -1)
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的 data.table,将所有行保留为字符串“test”。
最终的数据集应该看起来像这样
name x y z
<chr> <dbl> <chr> <dbl>
1 N/A 1 testSmith -100
2 test Smith NA test Smith -98
3 test Smith -98 28 -1
Run Code Online (Sandbox Code Playgroud)
我可以像这样逐列进行
setDT(df)[name%like%"test"|y%like%"test"]
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是我有数百个字符串变量,我想找到一种更紧凑的方法。我尝试了以下方法,但它们不起作用
chvar <- keep(trai,is.character)%>%names()
setDT(df)[chvar%like%"test"]#error
setDT(df)[(chvar)%like%"test"]#error
setDT(df)[.(chvar)%like%"test"]#empty dt
Run Code Online (Sandbox Code Playgroud)
有人知道我怎样才能快速有效地做到这一点吗?
非常感谢你的帮助