标签: rowwise

dplyr rowwise sum和其他函数,如max

如果我想在数据框中使用一些变量求和dplyr,我可以这样做:

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

> select(iris, starts_with('Petal')) %>% rowSums()
  [1] 1.6 1.6 1.5 1.7 1.6 2.1 1.7 1.7 1.6 1.6 1.7 1.8 1.5 1.2 1.4 1.9 1.7 1.7 2.0 1.8 1.9 1.9 1.2 2.2 2.1 1.8 2.0 1.7 …
Run Code Online (Sandbox Code Playgroud)

r dplyr rowwise

4
推荐指数
3
解决办法
3864
查看次数

使用 rowwise() 计算数据帧每一行中 NA 的数量的问题

我在使用 rowwise() 计算每行中的 NA 数量时遇到问题。我的最小例子:

df <- data.frame(Q1 = c(rep(1, 1), rep(NA, 9)),
                 Q2 = c(rep(2, 2), rep(NA, 8)),
                 Q3 = c(rep(3, 3), rep(NA, 7))
)
df
   Q1 Q2 Q3
1   1  2  3
2  NA  2  3
3  NA NA  3
4  NA NA NA
5  NA NA NA
6  NA NA NA
7  NA NA NA
8  NA NA NA
9  NA NA NA
10 NA NA NA
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列来计算每行中 NA 的数量。我可以通过写作来做到这一点

 df$Count_NA <- rowSums(is.na(df))
 df
   Q1 Q2 Q3 …
Run Code Online (Sandbox Code Playgroud)

r dplyr rowwise

4
推荐指数
4
解决办法
138
查看次数

rownames_to_column 在 rowwise() 正确后不起作用

我有这个 df:

df <- structure(list(a = 1:5, b = 6:10, c = 11:15, d = c("a", "b", 
"c", "d", "e"), e = 1:5), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))

      a     b     c d         e
  <int> <int> <int> <chr> <int>
1     1     6    11 a         1
2     2     7    12 b         2
3     3     8    13 c         3
4     4     9    14 d         4
5     5    10    15 e         5
Run Code Online (Sandbox Code Playgroud)

rownames_to_column 作品:

df %>% 
  column_to_rownames(var="d") %>% 
  rownames_to_column(var= "d") …
Run Code Online (Sandbox Code Playgroud)

r rowname dplyr rowwise tibble

4
推荐指数
1
解决办法
67
查看次数

如何使用 dplyr 获取每行最大值的列

我在 R 中有一个数据框。对于每一行,我想选择哪一列具有最高值,并粘贴该列的名称。当只有两列可供选择时,这很简单(请注意,如果两列的值都小于 0.1,我有一个不包括行的过滤步骤):

set.seed(6)
mat_simple <- matrix(rexp(200, rate=.1), ncol=2) %>%
    as.data.frame() 

head(mat_simple)
         V1         V2
1  2.125366  6.7798683
2  1.832349  8.9610534
3  6.149668 15.7777370
4  3.532614  0.2355711
5 21.110703  1.2927119
6  2.871455 16.7370847
    
mat_simple <- mat_simple %>%
    mutate(
        class = case_when(
            V1 < 0.1 & V2 < 0.1 ~ NA_character_,
            V1 > V2 ~ "V1",
            V2 > V1 ~ "V2"
        )
    )

head(mat_simple)
         V1         V2 class
1  2.125366  6.7798683    V2
2  1.832349  8.9610534    V2
3  6.149668 15.7777370    V2
4  3.532614 …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr rowwise

4
推荐指数
2
解决办法
82
查看次数

按行合并所有列

我们如何在不指定列名的情况下使用dplyr ( tidyverse ) 为所有列获取第一个非缺失值 -合并- 行方式?

示例数据:

df <- data.frame(x = c(NA, "s3", NA, NA,"s4"),
                 y = c("s1", NA, "s6", "s7", "s4"),
                 z = c("s1", NA, NA, "s7", NA))
Run Code Online (Sandbox Code Playgroud)

我们可以使用do.call,但这看起来不太整洁:

df$xyz <- do.call(coalesce, df)
#      x    y    z xyz
# 1 <NA>   s1   s1  s1
# 2   s3 <NA> <NA>  s3
# 3 <NA>   s6 <NA>  s6
# 4 <NA>   s7   s7  s7
# 5   s4   s4 <NA>  s4
Run Code Online (Sandbox Code Playgroud)

这可行,但我不想指定列:

df %>% 
  mutate(xyz = …
Run Code Online (Sandbox Code Playgroud)

r coalesce dplyr rowwise

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

高效地按行应用函数

我有一个包含多个列的数据框,其中包含一个诊断的信息。条目是TRUE,FALSENA。我创建了一个向量,将这些列总结如下:如果患者在某个时间 ( TRUE) 被诊断出来,则TRUE,如果唯一有效的条目是FALSE,则FALSE,如果只是缺失,则NA。将文本写成代码:

data.frame(a= c(FALSE, TRUE, NA, FALSE, TRUE, NA, FALSE, TRUE, NA),
           b= c(FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, NA, NA, NA),
           expected= c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, NA))
Run Code Online (Sandbox Code Playgroud)

我需要按行遍历所有列,并且使用split. 不幸的是,我的数据很大,需要很长时间。我现在所做的是

library(magrittr)
# big example data
df <- expand.grid(c(FALSE, TRUE, NA), c(FALSE, TRUE, NA)) %>%
  .[rep(1:nrow(.), 50000), ] %>%
  as.data.frame() %>%
  setNames(., nm= c("a", "b"))

# My approach …
Run Code Online (Sandbox Code Playgroud)

r logical-operators dataframe rowwise

3
推荐指数
2
解决办法
232
查看次数

查找每行的最后一个非缺失值

我有一个数据框,其中包含在时间点 0 到 2 测量的变量var。如下所示:

df <- data.frame(id= letters[1:5],
                 var0= c(1:3, NA, 5),
                 var1= c(11, NA, NA, 14:15),
                 var2= c(NA, NA, NA, NA, 25))
df
  id var0 var1 var2
1  a    1   11   NA
2  b    2   NA   NA
3  c    3   NA   NA
4  d   NA   14   NA
5  e    5   15   25
Run Code Online (Sandbox Code Playgroud)

对于每一行,即对于每个人,我想保留最新的非缺失值。所以期望的输出是:

  id var0 var1 var2 last_val
1  a    1   11   NA       11
2  b    2   NA   NA        2
3  c    3   NA   NA        3 …
Run Code Online (Sandbox Code Playgroud)

r dplyr rowwise

3
推荐指数
2
解决办法
119
查看次数

dplyr mutate - 如何将一行作为函数参数传递?

我正在尝试在我的 tibble 中创建一个新列,该列收集并格式化所有其他列中找到的所有单词。如果可能的话,我想使用 dplyr 来做到这一点。原始数据框:

df <- read.table(text =      "  columnA     columnB      
                 1            A           Z                    
                 2            B           Y                    
                 3            C           X                    
                 4            D           W                    
                 5            E           V                   
                 6            F           U            "  ) 
Run Code Online (Sandbox Code Playgroud)

作为一个简化的例子,我希望做类似的事情:

df %>%
    rowwise() %>%
    mutate(newColumn = myFunc(.))
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

       columnA     columnB      newColumn
1            A           Z             AZ        
2            B           Y             BY        
3            C           X             CX        
4            D           W             DW        
5            E           V             EV        
6            F           U             FU       
Run Code Online (Sandbox Code Playgroud)

当我在代码中尝试此操作时,输出如下所示:

       columnA     columnB      newColumn
1            A           Z             ABCDEF        
2            B           Y             ABCDEF …
Run Code Online (Sandbox Code Playgroud)

r dplyr rowwise

2
推荐指数
1
解决办法
4414
查看次数

我如何在 `mutate_at` 中应用一个函数来对其他列中的值进行逐行条件处理?

我有一个数据框,我想在其中转换一组列的值,条件是同一行中另一组列中的值。我想,未能做到这一点在tidyverse与组合rowwisemutate_at。这是一个可重现的示例。

library(dplyr)

set.seed(20912)
dat <- data.frame(cat1 = sample(LETTERS[1:2], 10, replace = TRUE), cat2 = sample(LETTERS[1:2], 10, replace = TRUE), id = 3, sim_1 = rnorm(10), sim_2 = rnorm(10), stringsAsFactors = FALSE)

> dat
   cat1 cat2 id      sim_1       sim_2
1     A    A  3 -0.1054062 -0.47563580
2     B    A  3 -1.7198921  0.76713640
3     A    B  3 -0.5946627 -0.33958464
4     B    B  3 -1.6547488 -0.13026564
5     B    B  3 -0.3779149  1.29590315
6     B    B  3  0.6271939  0.08707965 …
Run Code Online (Sandbox Code Playgroud)

r dplyr mutate rowwise

2
推荐指数
1
解决办法
109
查看次数

如何检查 data.table 的各个行中的值是否相同

假设我有以下 data.table:

dt <- data.table(a = 1:2, b = 1:2, c = c(1, 1))

# dt
#    a b c
# 1: 1 1 1
# 2: 2 2 1
Run Code Online (Sandbox Code Playgroud)

创建第四列以d指示每行中预先存在的值都相同的最快方法是什么,以便生成的 data.table 将如下所示?

# dt
#    a b c              d
# 1: 1 1 1      identical
# 2: 2 2 1  not_identical
Run Code Online (Sandbox Code Playgroud)

我想避免使用duplicated函数并希望坚持使用identical或类似的函数,即使这意味着迭代每行中的项目。

r data.table rowwise

2
推荐指数
1
解决办法
62
查看次数