使用cbind函数合并列计算时如何保留原有行名
R语言合并计算列时保留行名的解决方案
你使用cbind后丢失行名,一般是因为输入的两个向量未预先设置names属性,或是合并时仅提取了数值列、丢弃了原有行名信息,可根据数据存储形式选择以下方案:
方案1:两个向量本身带有行名属性
如果你的两个原始向量已经设置了星期作为names属性,直接相加后构造结果即可自动保留行名:
# 构造示例数据(对应你已有的两个向量) vec1 <- c(1,1,1,1,1) names(vec1) <- c("Monday","Tuesday","Wednesday","Thursday","Friday") vec2 <- c(2,2,2,2,2) names(vec2) <- c("Monday","Tuesday","Wednesday","Thursday","Friday") # 直接计算并生成保留行名的结果 result <- data.frame( value = vec1 + vec2 )
也可以结合cbind计算行和,行名会自动保留:
combined <- cbind(vec1, vec2) result <- data.frame( value = rowSums(combined) )
方案2:行名存储为数据框的单独列
如果你原本的星期信息是存成数据框的普通列,先按星期列合并两个数据框再计算即可:
# 示例原始数据框 df1 <- data.frame( weekday = c("Monday","Tuesday","Wednesday","Thursday","Friday"), val = c(1,1,1,1,1) ) df2 <- data.frame( weekday = c("Monday","Tuesday","Wednesday","Thursday","Friday"), val = c(2,2,2,2,2) ) # 合并计算 library(dplyr) result <- inner_join(df1, df2, by = "weekday") %>% mutate(total = val.x + val.y) %>% select(weekday, total) # 如果需要把星期设为行名,额外执行以下两行 rownames(result) <- result$weekday result$weekday <- NULL
内容的提问来源于stack exchange,提问作者Joumayl Khalid
相关产品推荐
相关产品推荐

