如何通过在R语言中对相同的变量进行分组来将行合并为单列
Posted
技术标签:
【中文标题】如何通过在R语言中对相同的变量进行分组来将行合并为单列【英文标题】:How to merge rows into single column by grouping the same variable in R language 【发布时间】:2022-01-14 02:53:06 【问题描述】:我有一个数据框
type function class
A AXX AYY
A AZZ AUU
B BXX BYY
B BUU BHH
我想把它们变成
type function class type function class
A AXX AYY A AZZ AUU
B BXX BYY B BUU BHH
我确实尝试使用 dcast
和 melt
,但没有为我锻炼,我是 R 新手,请帮助
【问题讨论】:
R 不喜欢重复的列名。我能问一下你通过这种方式格式化你的列想要达到什么目的吗? 【参考方案1】:这是另一个命题:
library(dplyr)
library(tidyr)
library(purrr)
df <- data.frame(
stringsAsFactors = FALSE,
check.names = FALSE,
type = c("A", "A", "B", "B"),
`function` = c("AXX", "AZZ", "BXX", "BUU"),
class = c("AYY", "AUU", "BYY", "BHH")
)
df <- df %>%
group_by(type) %>%
mutate(id = row_number())
df <- split(df, df$id)
df <- map(df, select, -id)
df <- reduce(df, cbind)
names(df) <- gsub("[.]*\\d$", "", names(df))
但是,我担心列同名以后可能会出现问题。
【讨论】:
【参考方案2】:这是你所期待的吗?
library(dplyr)
my_df <- data.frame("type" = c("A", "A", "B", "B", "C"),
"function1" = c("AXX", "AZZ", "BXX", "BUU", "CCC"),
"class1" = c("AYY", "AUU", "BYY", "BHH", "CCC"),
stringsAsFactors = FALSE)
my_df <- my_df %>% group_by(type) %>% mutate(My_id = cur_group_id())
my_base <- my_df %>% group_by(type) %>% filter(row_number() == 1)
my_other <- my_df %>% group_by(type) %>% filter(row_number() != 1)
my_base <- left_join(x = my_base, y = my_other, by = "My_id")
colnames(my_base) <- gsub(pattern = "\\.x$|\\.y$", replacement = "", x = colnames(my_base))
my_base <- my_base[, -which(colnames(my_base) == "My_id")]
【讨论】:
【参考方案3】:我认为所有(尚未)提出的解决方案只有在类型元素在 data.frame 中只有一次或两次时才有效。我不确定您的数据是否总是如此,因此我在我的解决方案中添加了一个 if 条件。
result = NULL
dataCount <- max(as.data.frame(table(data$type))[,2])
if (dataCount <= 2)
data1 <- data[duplicated(data$type),]
data2 <- data[!duplicated(data$type),]
result <- merge(data2, data1, by="type", all.x=T)
>result
type function..x class.x function..y class.y
1 A AXX AYY AZZ AUU
2 B BXX BYY BUU BHH
如果您想创建,那么您要求的 data.frame 可以简单地执行:
result$type.y <- result$type
result <- result[,c(1,2,3,6,4,5)]
names(result) <- unlist(lapply(1:ncol(result), function(x) strsplit(names(result)[x], "[.]")[[1]][1] ))
> result
type function class type function class
1 A AXX AYY A AZZ AUU
2 B BXX BYY B BUU BHH
但是,一般来说,我建议避免使用 function
作为列名(例如,改用 function2use
),因为它是 R 中的内置名称,并使用合并输出中的命名,例如class.x 和 class.y 而不是两次使用相同的列名。
【讨论】:
以上是关于如何通过在R语言中对相同的变量进行分组来将行合并为单列的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用caret包的featurePlot函数可视化变量的重要性通过分组数据分布差异查看变量对于预测目标变量的判别性通过可视化密度图进行判别分析
R语言使用caret包的featurePlot函数可视化变量的重要性通过分组数据分布差异查看变量对于预测目标变量的判别性通过可视化密度图进行判别分析
R语言使用caret包的featurePlot函数可视化变量的重要性通过分组数据分布差异查看变量对于预测目标变量的判别性通过可视化箱图进行判别分析