Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将R转换为宽格式,排列方式取决于列中的值_R_Dplyr_Pivot - Fatal编程技术网

将R转换为宽格式,排列方式取决于列中的值

将R转换为宽格式,排列方式取决于列中的值,r,dplyr,pivot,R,Dplyr,Pivot,我得到了一个表格,其中包含了各种样本(“样本1”等)的数据,使用这些数据进行了几种类型的测量(a到C)。每次测量给出3个值:浓度、最大值和最小值 my.sample <- c("sample1", "sample1", "sample2", "sample2", "sample3") type <- c("A", "B", "A&quo

我得到了一个表格,其中包含了各种样本(“样本1”等)的数据,使用这些数据进行了几种类型的测量(a到C)。每次测量给出3个值:浓度、最大值和最小值

my.sample <- c("sample1", "sample1", "sample2", "sample2", "sample3")
type <- c("A", "B", "A", "C", "C")
concentration <- c(12, 5, 7, 10, 14)
max <- c(13, 6, 7, 11, 15)
min <- c(11, 4, 6, 9, 13)

mydata <- data.frame(my.sample, type, concentration, max, min)

> mydata
  my.sample type concentration max min
1   sample1    A            12  13  11
2   sample1    B             5   6   4
3   sample2    A             7   7   6
4   sample2    C            10  11   9
5   sample3    C            14  15  13
是否有方法根据条件加宽数据并在列名中包含值(此处:from
type
)?我的真实数据集中有更多的类型,因此理想情况下,它应该是可推广的。

这是可行的:

library(dplyr)

mydata %>% 
  pivot_wider(id_cols = my.sample, names_from = type, values_from = c(concentration, max, min), names_glue = "{type}_{.value}") %>% 
  select(my.sample, starts_with("A"), starts_with("B"), starts_with("C"))
这给了我们:

# A tibble: 3 x 10
  my.sample A_concentration B_concentration C_concentration A_max B_max C_max A_min B_min C_min
  <chr>               <dbl>           <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 sample1                12               5              NA    13     6    NA    11     4    NA
2 sample2                 7              NA              10     7    NA    11     6    NA     9
3 sample3                NA              NA              14    NA    NA    15    NA    NA    13
#一个tible:3 x 10
我的样本A_浓度B_浓度C_浓度A_最大B_最大C_最大A_最小B_最小C_最小
1个样本1 12 5 NA 13 6 NA 11 4 NA
2样本2 7 NA 10 7 NA 11 6 NA 9
3样本3 NA 14 NA 15 NA 13
这项工作:

library(dplyr)

mydata %>% 
  pivot_wider(id_cols = my.sample, names_from = type, values_from = c(concentration, max, min), names_glue = "{type}_{.value}") %>% 
  select(my.sample, starts_with("A"), starts_with("B"), starts_with("C"))
这给了我们:

# A tibble: 3 x 10
  my.sample A_concentration B_concentration C_concentration A_max B_max C_max A_min B_min C_min
  <chr>               <dbl>           <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 sample1                12               5              NA    13     6    NA    11     4    NA
2 sample2                 7              NA              10     7    NA    11     6    NA     9
3 sample3                NA              NA              14    NA    NA    15    NA    NA    13
#一个tible:3 x 10
我的样本A_浓度B_浓度C_浓度A_最大B_最大C_最大A_最小B_最小C_最小
1个样本1 12 5 NA 13 6 NA 11 4 NA
2样本2 7 NA 10 7 NA 11 6 NA 9
3样本3 NA 14 NA 15 NA 13

太棒了,非常感谢!如何将类型值放在列名的第一位(例如A_浓度等)?@Nereus np!更新了帖子。您可以使用
names\u glue
非常好,非常感谢!如何将类型值放在列名的第一位(例如A_浓度等)?@Nereus np!更新了帖子。您可以使用
名称\u胶水