我有一个很大的数据表,其中的某些参数是在

  1. 没有特别的一面(我称它们为"NoSide")或
  2. 左右两边都有.
myinput <- data.frame(Parameter=letters[1:10], NoSide=c(NA,NA,NA,1,3,3,2,0,1,NA), Right=c(2,3,1,NA,NA,NA,NA,NA,NA,1), Left=c(0,1,4,NA,NA,NA,NA,NA,NA,2))

> myinput
   Parameter NoSide Right Left
1          a     NA     2    0
2          b     NA     3    1
3          c     NA     1    4
4          d      1    NA   NA
5          e      3    NA   NA
6          f      3    NA   NA
7          g      2    NA   NA
8          h      0    NA   NA
9          i      1    NA   NA
10         j     NA     1    2

我希望数据以宽的形式显示如下,因为在这个特定的例子中,右侧和左侧的测量值是不应该集中在一起的离散值:

myheaders = c("a_Right","a_Left","b_Right","b_Left","c_Right","c_Left","d","e","f","g","h","i","j_Right","j_Left")
mydata = c(2,0,3,1,1,4,1,3,3,2,0,1,1,2)
myoutput = as.data.frame(t(mydata))
colnames(myoutput) <- myheaders
myoutput

> myoutput
  a_Right a_Left b_Right b_Left c_Right c_Left d e f g h i j_Right j_Left
1       2      0       3      1       1      4 1 3 3 2 0 1       1      2

基本上,NoSide、Right和Left列的内容是从左到右读取的,并以宽的形式列出,同时省略了"na"值.应该根据值是否派生自"NoSide"、"Right"或"Left"列(理想情况下名称中没有"NoSide")来创建新的列名.

你有什么建议可以把myinput转换成myoutput的最简单的方法吗?谢谢!

推荐答案

pivot_wider(myinput, 
 names_from = Parameter, values_from = NoSide:Left, names_vary='slowest',
 names_glue = "{Parameter}{if_else(.value=='NoSide','',str_c('_',.value))}") %>% 
select(!where(is.na))

# A tibble: 1 × 14
  a_Right a_Left b_Right b_Left c_Right c_Left     d     e     f     g     h     i j_Right j_Left
    <dbl>  <dbl>   <dbl>  <dbl>   <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>  <dbl>
1       2      0       3      1       1      4     1     3     3     2     0     1       1      2

R相关问答推荐

如何创建构成多个独立列条目列表的收件箱框列?

如果行和列名以相同的开头,将矩阵值设置为0

根据收件箱中的特定值提取列名

无法将传奇添加到cowplot多情节中

R:更新后无法运行控制台

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

判断字符串中数字的连续性

用相同方法得到不同函数的ROC最优截断值

在R中为马赛克图中的每个字段着色

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

使用across,starts_with和ifelse语句变更多个变量

如何基于两个条件从一列中提取行

是否有新方法来更改Facet_WRAP(Ggplot2)中条文本的文本 colored颜色 ?

使用ggplot2中的sec_axis()调整次轴

在ggploy中创建GeV分布时出错

TidyVerse中长度不等的列结合向量

具有自定义仓位限制和计数的GGPLATE直方图

如何将图例文本添加到图例符号中

在使用ggplot2的情况下,如何在使用coord_trans函数的同时,根据未转换的坐标比来定位geom_瓷砖?

根据用户输入更改标记大小和 colored颜色 (R)