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')”的对象。是的。修复了。抱歉。谢谢。“.”做什么?或者你怎么知道它需要什么?