Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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_Pipeline_Cbind - Fatal编程技术网

R 如何移动柱的下半部分';将值放入新创建的列中?

R 如何移动柱的下半部分';将值放入新创建的列中?,r,dplyr,pipeline,cbind,R,Dplyr,Pipeline,Cbind,我有一个列,其中包含前50%行中三种不同测量的平均值,以及后50%行中的相关标准误差。在上一列中,是用于每一项的名称(meanNativeSR、meanExoticSR、meanTotalSR、seN、seE、seT)。我想创建两个新列,第一列包含seu名称,第二列包含它们的值,然后去掉底部50%的行。这是我的数据集: df <- structure(list(Invasion = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1

我有一个列,其中包含前50%行中三种不同测量的平均值,以及后50%行中的相关标准误差。在上一列中,是用于每一项的名称(meanNativeSR、meanExoticSR、meanTotalSR、seN、seE、seT)。我想创建两个新列,第一列包含seu名称,第二列包含它们的值,然后去掉底部50%的行。这是我的数据集:

df <- structure(list(Invasion = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 
3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 
2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 
1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L
), .Label = c("Low", "Medium", "High"), class = "factor"), Growth = structure(c(1L, 
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 
1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 
2L, 3L, 1L, 2L, 3L), .Label = c("cover", "herb", "woody"), class = "factor"), 
    mean_se = c("meanNativeSR", "meanNativeSR", "meanNativeSR", 
    "meanNativeSR", "meanNativeSR", "meanNativeSR", "meanNativeSR", 
    "meanNativeSR", "meanNativeSR", "meanExoticSR", "meanExoticSR", 
    "meanExoticSR", "meanExoticSR", "meanExoticSR", "meanExoticSR", 
    "meanExoticSR", "meanExoticSR", "meanExoticSR", "meanTotalSR", 
    "meanTotalSR", "meanTotalSR", "meanTotalSR", "meanTotalSR", 
    "meanTotalSR", "meanTotalSR", "meanTotalSR", "meanTotalSR", 
    "seN", "seN", "seN", "seN", "seN", "seN", "seN", "seN", "seN", 
    "seE", "seE", "seE", "seE", "seE", "seE", "seE", "seE", "seE", 
    "seT", "seT", "seT", "seT", "seT", "seT", "seT", "seT", "seT"
    ), value = c(0.769230769230769, 0.230769230769231, 0.923076923076923, 
    2.46153846153846, 6.84615384615385, 0.538461538461538, 1.69230769230769, 
    1.76923076923077, 1.15384615384615, 0.384615384615385, 0, 
    1.38461538461538, 1.76923076923077, 0, 2.23076923076923, 
    2.07692307692308, 0.769230769230769, 2.46153846153846, 1.15384615384615, 
    0.230769230769231, 2.53846153846154, 4.23076923076923, 6.84615384615385, 
    3.23076923076923, 3.76923076923077, 2.76923076923077, 3.84615384615385, 
    0.280883362823162, 0.12162606385263, 0.329364937914491, 0.312463015562922, 
    0.705710715103738, 0.24325212770526, 0.36487819155789, 0.280883362823162, 
    0.191021338791684, 0.140441681411581, 0, 0.180400606147055, 
    0.201081886427668, 0, 0.230769230769231, 0.329364937914491, 
    0.12162606385263, 0.24325212770526, 0.273771237231572, 0.12162606385263, 
    0.24325212770526, 0.394738572265145, 0.705710715103738, 0.440772139427464, 
    0.532938710021193, 0.257050482766198, 0.336767321450351)), row.names = c(NA, 
-54L), class = c("tbl_df", "tbl", "data.frame"))

df这里有一种方法,它具有
pivot\u wide
unest

library(tidyverse)
df %>%
    mutate(class = str_extract(mean_se,"(N|E|T)"),
           fun = str_extract(mean_se,"(mean|se)")) %>%
    pivot_wider(id_cols = c("Invasion","Growth"), names_from = "fun",
                values_from = c("mean_se","value")) %>%
  unnest()
# A tibble: 27 x 6
   Invasion Growth mean_se_mean mean_se_se value_mean value_se
   <fct>    <fct>  <chr>        <chr>           <dbl>    <dbl>
 1 Low      cover  meanNativeSR seN             0.769    0.281
 2 Low      cover  meanExoticSR seE             0.385    0.140
 3 Low      cover  meanTotalSR  seT             1.15     0.274
 4 Low      herb   meanNativeSR seN             0.231    0.122
 5 Low      herb   meanExoticSR seE             0        0    
 6 Low      herb   meanTotalSR  seT             0.231    0.122
 7 Low      woody  meanNativeSR seN             0.923    0.329
 8 Low      woody  meanExoticSR seE             1.38     0.180
 9 Low      woody  meanTotalSR  seT             2.54     0.243
10 Medium   cover  meanNativeSR seN             2.46     0.312
# … with 17 more rows
库(tidyverse)
df%>%
突变(类别=str|u提取物(平均值),(N | E | T),
fun=str_提取物(平均值,“(平均值)”)%>%
pivot_wide(id_cols=c(“入侵”、“增长”),名字来自于=“乐趣”,
值_from=c(“平均值”、“值”))%>%
unnest()
#A tibble:27x6
入侵增长平均值平均值平均值平均值平均值
1低覆盖率平均值为0.769 0.281
2低盖平均值参见0.385 0.140
3低盖平均总SR组1.15 0.274
4低草本植物平均值seN 0.231 0.122
5低草本植物平均值参见0
6低平均总SR组0.231 0.122
7低木质平均值0.923 0.329
8低矮木质平均值参见1.38 0.180
9低总平均值SR组2.54 0.243
10中等覆盖率平均值seN 2.46 0.312
#…还有17排

您将收到一些警告,但它仍然可以工作。

使用
tidyverse
,我们可以进行
组分割
,更改列名,并进行
内部联接

library(dplyr)
library(purrr)
df %>%
   group_split(grp = row_number() > 27, .keep = FALSE) %>% 
   map2(list(c('mean', 'mean_value'), c('se', 'se_value')),
        ~ {nm1 <- .y
           .x  %>%
             rename_at(3:4, ~ nm1) %>%
             mutate(rn = row_number())} ) %>% 
  reduce(inner_join) %>% 
  select(-rn)
库(dplyr)
图书馆(purrr)
df%>%
组分割(grp=row\U number()>27,.keep=FALSE)%>%
map2(列表(c(‘平均值’,‘平均值’),c(‘se’,‘se值’),
~{nm1%
将_重命名为(3:4,~nm1)%>%
变异(rn=行数())}]>%
减少(内螺纹联接)%>%
选择(-rn)
-输出

# A tibble: 27 x 6
#   Invasion Growth mean         mean_value se    se_value
#   <fct>    <fct>  <chr>             <dbl> <chr>    <dbl>
# 1 Low      cover  meanNativeSR      0.769 seN      0.281
# 2 Low      herb   meanNativeSR      0.231 seN      0.122
# 3 Low      woody  meanNativeSR      0.923 seN      0.329
# 4 Medium   cover  meanNativeSR      2.46  seN      0.312
# 5 Medium   herb   meanNativeSR      6.85  seN      0.706
# 6 Medium   woody  meanNativeSR      0.538 seN      0.243
# 7 High     cover  meanNativeSR      1.69  seN      0.365
# 8 High     herb   meanNativeSR      1.77  seN      0.281
# 9 High     woody  meanNativeSR      1.15  seN      0.191
#10 Low      cover  meanExoticSR      0.385 seE      0.140
# … with 17 more rows
#一个tible:27 x 6
#入侵增长平均值se值
#                           
#1低覆盖率意味着0.769 seN 0.281
#2低草本植物平均值0.231 seN 0.122
#3低木质平均值0.923森0.329
#4中等覆盖率平均值2.46 seN 0.312
#5中草药平均值6.85 seN 0.706
#6中等木质平均值0.538森0.243
#7高覆盖率平均值1.69 seN 0.365
#8高平均值1.77 seN 0.281
#9高木本平均值1.15森0.191
#10低盖平均值0.385见0.140
#…还有17排

我认为,除了齐心协力之外,没有更快捷、更容易实现目标的方法。代码中最长的部分是分配新的colname,这实际上不能缩短。其余的可以放在一条线上。但实际上,您必须始终平衡简洁性和可读性

上面显示的dplyr方法非常简洁,但我相信它们可以处理比您更复杂/一般的情况

df_final_2 <- cbind(head(df, -27), df[28:54,3:4])
colnames(df_final_2)[3:6] <- c("mean", "mean_value","se", "se_value")
df_final_2
df_final_2 <- cbind(head(df, -27), df[28:54,3:4])
colnames(df_final_2)[3:6] <- c("mean", "mean_value","se", "se_value")