小编Ale*_*lex的帖子

仅识别非重复行

我有一个包含许多重复行的数据集,我想仅隔离非重复值。我的 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()做这份工作。它正在区分我正在努力解决的非重复行

r unique rows data-manipulation

6
推荐指数
1
解决办法
1879
查看次数

用ggplot标记垂直线

我有一个看起来像这样的数据集,

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)

plot r ggplot2

6
推荐指数
1
解决办法
7210
查看次数

在 R 中顺序迭代两个列表

我有两个 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)

loops r function sequence

6
推荐指数
2
解决办法
285
查看次数

使用 data.table 过滤多列中的字符串

我有一个看起来像这样的数据集。

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)

有人知道我怎样才能快速有效地做到这一点吗?

非常感谢你的帮助

r data.table tidyverse

3
推荐指数
1
解决办法
876
查看次数