R语言中如何将Site转为列并按行排列数值?是否需用pivot_longer?
解决方法:不需要用pivot_longer,调整pivot_wider即可
你要做的是长表转宽表,pivot_wider是正确的工具,但当前问题是原始数据里没有给每个Site下的数值分配行标识,导致pivot_wider不知道该把多个值拆到不同行中。只需先给每个Site分组,添加组内的行序号,再用pivot_wider就能得到你想要的格式。
修正后的代码:
library(tidyverse) # 构造原始数据 matrix <- as.data.frame(matrix(c(1982,1923,3445,2345,12345,1234,"Site1","Site2","Site2","Site1","Site2","Site3"), nrow=6,ncol=2)) # 按Site分组添加行号,再转宽表 result <- matrix %>% group_by(V2) %>% mutate(row_id = row_number()) %>% ungroup() %>% pivot_wider(names_from = V2, values_from = V1) %>% select(-row_id) # 移除临时行号列 print(result)
运行后得到的结果与你期望的一致(R中空值显示为NA,若要转为空字符串,可追加replace(result, is.na(result), "")处理):
| Site1 | Site2 | Site3 |
|---|---|---|
| 1982 | 1923 | 1234 |
| 2345 | 3445 | NA |
| NA | 12345 | NA |
内容的提问来源于stack exchange,提问作者ariggs154
相关产品推荐
相关产品推荐

