我的数据集的一个小样本如下所示:
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。在我的案例中被视为相同的名称)。换句话说,最终的输出应该是这样的:
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列。
发布于 2021-01-08 12:14:51
假设您拥有的是一个数据帧data <- data.frame(x,y),而不是使用cbind生成的矩阵,您可以使用fct_collapse将不同的值组合成一个,然后通过这个新的列(z)和x值对数据进行arrange。
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。
data %>%
mutate(z = toupper(gsub("[[:punct:]]", "", y))) %>%
arrange(z, x) %>%
select(-z) -> result
result发布于 2021-01-08 13:38:59
library(dplyr)
data %>%
as.data.frame() %>%
group_by(x, y) %>%
summarise(records = n()) %>%
arrange(x, y)发布于 2021-01-08 16:54:26
根据你的问题,这只是一个数据排序的问题。
result <- data[order(data$x, data$y),]或者考虑到您想要整理A的.A。
result <- data[order(data$x, toupper(gsub("[^A-Za-z]","",data$y))),]https://stackoverflow.com/questions/65623271
复制相似问题