当前位置: 首页 > 知识库问答 >
问题:

当我不知道data.frame中的列名时,当我使用dplyr mutate函数时

万俟铭
2023-03-14
library(dplyr)
w<-c(2,3,4)
x<-c(1,2,7)
y<-c(1,5,4)
z<-c(3,2,6)
df <- data.frame(w,x,y,z)
df %>% rowwise() %>% mutate(minimum = min(x,y,z))

Source: local data frame [3 x 5]
Groups: <by row>

# A tibble: 3 x 5
      w     x     y     z     minimum
    <dbl> <dbl> <dbl> <dbl>   <dbl>
1     2     1     1     3       1 
2     3     2     5     2       2 
3     4     7     4     6       4
df %>% rowwise() %>% mutate(minimum=min(df[,2],df[,3], df[,4]))  

Source: local data frame [3 x 5]
Groups: <by row>

# A tibble: 3 x 5
       w     x     y     z    minimum
     <dbl> <dbl> <dbl> <dbl>   <dbl>
 1     2     1     1     3       1
 2     3     2     5     2       1
 3     4     7     4     6       1
 df %>% rowwise() %>% mutate(average=min(colnames(df)[2], colnames(df)[3], colnames(df)[4]))  
 df %>% rowwise() %>% mutate(average=min(noquote(colnames(df)[2]), noquote(colnames(df)[3]), noquote(colnames(df)[4])))  

我知道,当我不知道列名时,使用apply或不同的方法可以获得最小值。但是,我想知道dplyr mutate函数是否能够在没有已知列名的情况下做到这一点。

谢谢你,

共有1个答案

景同
2023-03-14

使用apply:

library(dplyr)
library(purrr)

df %>%
  mutate(minimum = apply(df[,2:4], 1, min))

或使用pmap:

df %>%
  mutate(minimum = pmap(.[2:4], min))

同时使用purrrlyr中的by_row:

df %>%
  purrrlyr::by_row(~min(.[2:4]), .collate = "rows", .to = "minimum")
# tibble [3 x 5]
      w     x     y     z minimum
  <dbl> <dbl> <dbl> <dbl>   <dbl>
1     2     1     1     3       1
2     3     2     5     2       2
3     4     7     4     6       4
 类似资料: