R创建为每个不同组提供分组号的列

R创建为每个不同组提供分组号的列,r,R,我需要向数据中添加一列,该列包含其他列的每个不同组合的数字分组。这个例子可能会更清楚: # Make data df <- data.frame(x = c(1,1,2,3,4,5,2,3,4,5), y = c(2, 2,3,4,5,1,3,4,5,1), value = c(1,2,3,4,5,6,7,8,9,10)) # Print the data df x y value 1 1 2 1 2 1 2 2 3 2 3 3 4 3 4 4

我需要向数据中添加一列,该列包含其他列的每个不同组合的数字分组。这个例子可能会更清楚:

# Make data
df <- data.frame(x = c(1,1,2,3,4,5,2,3,4,5),
y = c(2, 2,3,4,5,1,3,4,5,1),
value = c(1,2,3,4,5,6,7,8,9,10))
# Print the data
df
   x y value
1  1 2     1
2  1 2     2
3  2 3     3
4  3 4     4
5  4 5     5
6  5 1     6
7  2 3     7
8  3 4     8
9  4 5     9
10 5 1    10
我想象这样做:

   df <- df %>% 
    group_by(x,y) %>% 
    mutate(Location = ndistinct(x,y)
df%
(x,y)%>%
突变(位置=ndistinct(x,y)
但这不起作用。任何帮助都将不胜感激

谢谢

df %>%  mutate(., Location=group_indices(., x,y))
   x y value Location
1  1 2     1        1
2  1 2     2        1
3  2 3     3        2
4  3 4     4        3
5  4 5     5        4
6  5 1     6        5
7  2 3     7        2
8  3 4     8        3
9  4 5     9        4
10 5 1    10        5
见和

不像我一开始想的那么简单

更新

回答OP的问题:点
是“管道左侧的对象”(
%>%
)的占位符。通常您不需要它,因为默认情况下,magrittr(定义管道的包)假设您希望使用管道左侧的对象作为管道右侧函数的第一个参数,并进行替换。这非常有用,因为tidyverse的设计使管道左侧的对象始终是管道右侧函数的第一个参数右手边-因此您不必使用圆点

如果使用不属于tidyverse的函数,有时需要点来覆盖magrittr的默认行为

我在没有测试代码的情况下编写了这个答案的第一个版本,因为解决方案似乎“显而易见”。但后来我测试了它(在OP报告错误的同时),发现它不起作用。快速的Google将我带到了上面第二个链接中的github问题,从而找到了正确的答案

我还不明白为什么在这种特殊情况下,tidyverse函数不能像我预期的那样工作。(除了简单地说我的预期是错误的!)

见和

不像我一开始想的那么简单

更新

回答OP的问题:点
是“管道左侧的对象”(
%>%
)的占位符。通常您不需要它,因为默认情况下,magrittr(定义管道的包)假设您希望使用管道左侧的对象作为管道右侧函数的第一个参数,并进行替换。这非常有用,因为tidyverse的设计使管道左侧的对象始终是管道右侧函数的第一个参数右手边-因此您不必使用圆点

如果使用不属于tidyverse的函数,有时需要点来覆盖magrittr的默认行为

我在没有测试代码的情况下编写了这个答案的第一个版本,因为解决方案似乎“显而易见”。但后来我测试了它(在OP报告错误的同时),发现它不起作用。快速的Google将我带到了上面第二个链接中的github问题,从而找到了正确的答案

我还不明白为什么在这种特殊情况下,tidyverse函数不能像我期望的那样工作。(除了简单地说我的期望是错误的!)

在base R中,我们可以使用:

df$location <- as.numeric(factor(paste(df$x,df$y)))


   x y value location
1  1 2     1        1
2  1 2     2        1
3  2 3     3        2
4  3 4     4        3
5  4 5     5        4
6  5 1     6        5
7  2 3     7        2
8  3 4     8        3
9  4 5     9        4
10 5 1    10        5
df$location在基本R中,我们可以使用:

df$location <- as.numeric(factor(paste(df$x,df$y)))


   x y value location
1  1 2     1        1
2  1 2     2        1
3  2 3     3        2
4  3 4     4        3
5  4 5     5        4
6  5 1     6        5
7  2 3     7        2
8  3 4     8        3
9  4 5     9        4
10 5 1    10        5

df$location我也尝试过这个解决方案,但是我得到了这个错误:UseMethod中的错误(“组索引”):没有适用于“组索引”的方法应用于类“c”('double','numeric')”的对象。是的。修复了。抱歉。谢谢!“.”你知道吗?或者你怎么知道这是它需要的?我也尝试过这个解决方案,但我得到了这个错误:UseMethod中的错误(“group_Indexs”):没有适用于“group_Indexs”的方法应用于类“c”('double','numeric')”的对象。是的。修复了。抱歉。谢谢。“.”做什么?或者你怎么知道它需要什么?