首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的数据清理:先按编号分组,再按名称分组

R中的数据清理:先按编号分组,再按名称分组
EN

Stack Overflow用户
提问于 2021-01-08 11:59:42
回答 3查看 54关注 0票数 1

我的数据集的一个小样本如下所示:

代码语言:javascript
复制
x <- c(1,2,3,4,1,7,1)
y <- c("A","b","a","F","A",".A.","B")
data <- cbind(x,y)

我的目标是首先将具有相同编号的数据分组在一起,然后再将相同的名称组合在一起(A,a,.A。在我的案例中被视为相同的名称)。换句话说,最终的输出应该是这样的:

代码语言:javascript
复制
xnew <- c(1,1,3,7,1,2,4)
ynew <- c("A","A","a",".A.","B","b","F")
datanew <- cbind(xnew,ynew)

目前,我只能在标签为x的列中按数字分组。我还不能按名称分组。如果能得到任何帮助,我将不胜感激。

注意:我需要一个自动化的解决方案,因为我的原始数据集包含超过10,000行的x和y列。

EN

回答 3

Stack Overflow用户

发布于 2021-01-08 12:14:51

假设您拥有的是一个数据帧data <- data.frame(x,y),而不是使用cbind生成的矩阵,您可以使用fct_collapse将不同的值组合成一个,然后通过这个新的列(z)和x值对数据进行arrange

代码语言:javascript
复制
library(dplyr)
library(forcats)

data %>%
  mutate(z = fct_collapse(y, 
                          "A" = c('A', '.A.', 'a'), 
                          "B" = c('B', 'b'))) %>%
  arrange(z, x) %>%
  select(-z) -> result

result
#  x   y
#1 1   A
#2 1   A
#3 3   a
#4 7 .A.
#5 1   B
#6 2   b
#7 4   F

或者,您可以从y列中删除所有标点符号,将它们转换为大写或小写,然后使用arrange

代码语言:javascript
复制
data %>%
  mutate(z = toupper(gsub("[[:punct:]]", "", y))) %>%
  arrange(z, x) %>%
  select(-z) -> result

result
票数 1
EN

Stack Overflow用户

发布于 2021-01-08 13:38:59

代码语言:javascript
复制
library(dplyr)

data %>% 
  as.data.frame() %>% 
  group_by(x, y) %>% 
  summarise(records = n()) %>% 
  arrange(x, y)
票数 0
EN

Stack Overflow用户

发布于 2021-01-08 16:54:26

根据你的问题,这只是一个数据排序的问题。

代码语言:javascript
复制
result <- data[order(data$x, data$y),]

或者考虑到您想要整理A的.A。

代码语言:javascript
复制
result <- data[order(data$x, toupper(gsub("[^A-Za-z]","",data$y))),]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65623271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档