我正在查看螺栓的一些数据.如果我有例如
diameter thread
1 4
1 6
1 4
2 5
2 7
3 9
Run Code Online (Sandbox Code Playgroud)
我想要一种方法来制作一个新的列,告诉我它是每个直径的最大或最小线程.每个直径的螺纹尺寸不超过2个,但偶尔只有1个,在这种情况下我希望它的尺寸大.例如:
diameter thread size
1 4 small
1 6 large
1 4 small
2 5 small
2 7 large
3 9 large
Run Code Online (Sandbox Code Playgroud)
很容易使用 dplyr
library(dplyr)
data <- data.frame(diameter=c(1,1,2,2,3),thread=c(4,6,5,7,9))
data %>% group_by(diameter) %>% mutate(size=ifelse(thread==max(thread),"large","small"))
diameter thread size
(dbl) (dbl) (chr)
1 1 4 small
2 1 6 large
3 2 5 small
4 2 7 large
5 3 9 large
Run Code Online (Sandbox Code Playgroud)
ave这是使用group by 的基本 R 选项diameter。我还创建了一个小辅助函数f来提高可读性。
# define function f:
f <- function(x) (if(length(x)==1) 1L else x == max(x)) + 1L
# apply f to each thread by group of diameter:
dat$size <- c("small", "large")[ave(dat$thread, dat$diameter, FUN = f)]
# diameter thread size
#1 1 4 small
#2 1 6 large
#3 2 5 small
#4 2 7 large
#5 3 9 large
Run Code Online (Sandbox Code Playgroud)