我正在try 转换复杂的数据帧,例如(:

Olddata_long=

A  B   C  SAMPLE_ID  1   2   3   4   5
X1 Y1  Z1 SAMPLE1   G1  H1  J1  K1  L1 
X1 Y1  Z1 SAMPLE2   G2  H2  J2  K2  L2 
X2 Y2  Z2 SAMPLE1   G3  H3  J3  K3  L3 
X2 Y2  Z2 SAMPLE2   G4  H4  J4  K4  L4 

其中1-5是每个样品所特有的. 我正在try 将其转换为一种"宽"格式,例如:

A   B   C    SAMPLE1                      SAMPLE2
X1  Y1  Z1   1=G1;2=H1;3=J1;4=K1;5=L1     1=G2;2=H2;3=J2;4=K2;5=L2
X2  Y2  Z2   1=G3;2=H3;3=J3;4=K3;5=L3     1=G4;2=H4;3=J4;4=K4;5=L4

我已经处理了转换为长格式的问题,但无论如何都想不到对多个变量执行此操作.

data_wide <- spread(olddata_long, SAMPLE_ID, c(1,2,3,4,5))

也许连接1:5比转换为宽格式更容易?

推荐答案

您可以先将其加长,然后进行变换,然后将其加宽.例如

dd %>% 
  pivot_longer(`1`:`5`) %>% 
  mutate(val=paste0(name, "=", value), name=NULL, value=NULL) %>%
dd %>% 
  pivot_longer(`1`:`5`) %>% 
  mutate(val=paste0(name, "=", value), name=NULL, value=NULL) %>%
  pivot_wider(names_from=SAMPLE_ID, values_from=val, values_fn=function(x) paste(x, collapse=";"))
#   A     B     C     SAMPLE1                  SAMPLE2                 
#   <chr> <chr> <chr> <chr>                    <chr>                   
# 1 X1    Y1    Z1    1=G1;2=H1;3=J1;4=K1;5=L1 1=G2;2=H2;3=J2;4=K2;5=L2
# 2 X2    Y2    Z2    1=G3;2=H3;3=J3;4=K3;5=L3 1=G4;2=H4;3=J4;4=K4;5=L4

经过测试

dd <- read.table(text="A  B   C  SAMPLE_ID  1   2   3   4   5
X1 Y1  Z1 SAMPLE1   G1  H1  J1  K1  L1 
X1 Y1  Z1 SAMPLE2   G2  H2  J2  K2  L2 
X2 Y2  Z2 SAMPLE1   G3  H3  J3  K3  L3 
X2 Y2  Z2 SAMPLE2   G4  H4  J4  K4  L4", header=T, check.names=F) 

R相关问答推荐

是否有R函数来判断一个组中的所有值是否与另一个组中的所有值相同?

从载体创建 pyramid

将带有范围的字符串转换为R中的数字载体

通过绘图 Select 线串几何体并为其着色

使用ggplot 2根据R中的类别排列Likert比例gplot

更改绘图上的x轴断点,而不影响风险?

R Markdown中的交叉引用表

手动打印线型gplot

在R中,如何在每个堆叠的条上放置误差条,特别是当使用facet_grid时?

在R中使用数据集名称

当我们有多个特殊字符时,使用gsub删除名称和代码'

如何编辑gMarginal背景以匹配绘图背景?

如何使用tryCatch执行语句并忽略警告?

使用for循环和粘贴创建多个变量

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

如何从容器函数中提取conf并添加到ggplot2中?

R中的类别比较

Geom_arcbar()中出错:找不到函数";geom_arcbar";

ArrangeGrob()和类似的替代方法不接受Grob列表.在Grid.Draw,返回:glist中的错误(...):仅允许在glist";中使用Grobs;

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)