R 两个同名但不同的匹配列的行平均值:'_1';和'_2';
假设我有数据帧:R 两个同名但不同的匹配列的行平均值:'_1';和'_2';,r,R,假设我有数据帧: z = data.frame(col_1 = c(1,2,3,4), col_2 = c(3,4,5,6)) col_1 col_2 1 1 3 2 2 4 3 3 5 4 4 6 我想取名称相同但数字不同的列,例如“u1”和“u2”,并取成对平均值。实际上,我有一个包含许多对的大数据帧,它们的顺序不好,因此正在寻找一个可以应用于此的聪明解决方案 因此,输出应如下所示: col 1 2 2 3
z = data.frame(col_1 = c(1,2,3,4), col_2 = c(3,4,5,6))
col_1 col_2
1 1 3
2 2 4
3 3 5
4 4 6
我想取名称相同但数字不同的列,例如“u1”和“u2”,并取成对平均值。实际上,我有一个包含许多对的大数据帧,它们的顺序不好,因此正在寻找一个可以应用于此的聪明解决方案
因此,输出应如下所示:
col
1 2
2 3
3 4
4 5
列名称与列对相同,但附加标签已删除
任何帮助都将非常感谢。试试这种
tidyverse
方法。通过使用separate()
可以提取名称,然后通过重塑可以获得所需的输出。代码如下:
library(dplyr)
library(tidyr)
#Data
z = data.frame(col_1 = c(1,2,3,4), col_2 = c(3,4,5,6))
#Code
z1 <- z %>% mutate(id=1:n()) %>%
pivot_longer(-id) %>%
separate(name,c('var1','var2'),sep='_') %>%
group_by(id,var1) %>% summarise(Mean=mean(value)) %>%
pivot_wider(names_from = var1,values_from=Mean) %>% ungroup() %>% select(-id)
库(dplyr)
图书馆(tidyr)
#资料
z=数据帧(列1=c(1,2,3,4),列2=c(3,4,5,6))
#代码
z1%突变(id=1:n())%>%
枢轴长度(-id)%>%
单独的(名称,c('var1','var2'),sep='''''u')%>%
分组依据(id,var1)%>%总结(平均值=平均值(值))%>%
pivot\u更宽(名称\u from=var1,值\u from=Mean)%%>%ungroup()%%>%select(-id)
输出:
# A tibble: 4 x 1
col
<dbl>
1 2
2 3
3 4
4 5
#一个tible:4 x 1
上校
1 2
2 3
3 4
4 5
这里是一个使用list2DF
+split的基本R选项。默认值
+rowMeans
list2DF(lapply(split.default(z,gsub("_\\d+","",names(z))),rowMeans))
给
col
1 2
2 3
3 4
4 5
以下是一个面向
purr
的解决方案:
library(purrr)
library(stringr)
split.default(z, str_remove(names(z), "[:digit:]+$")) %>% map_dfc(rowMeans)
#> # A tibble: 4 x 1
#> col_
#> <dbl>
#> 1 2
#> 2 3
#> 3 4
#> 4 5
库(purrr)
图书馆(stringr)
split.default(z,str_remove(names(z),“[:digit:][+$”))%>%map_dfc(rowMeans)
#>#tibble:4 x 1
#>上校_
#>
#> 1 2
#> 2 3
#> 3 4
#> 4 5
即使z为:
z <- data.frame(col_1 = c(1,2,3,4),
col_2 = c(3,4,5,6),
anothercol_1 = c(1,2,3,4),
anothercol_2 = c(3,4,5,6))
z所以还有其他列叫做abc_1。。。abc_n
和xyz_1,…
所有列都是数字的?是的,所有列都是数字的,但它们只有对(因此n=2)。它们是在实验开始和结束时采取的措施。谢谢你的回答,这非常有效。你能解释一下gsub中的“\ud+”
吗。我意识到在我的数据集中我实际上没有下划线,只是简单的col1
和col2
,但是你的解决方案仍然可以用gsub中的“\\d+”
。@DylanDijk\\d+
匹配多个连续数字的模式,例如0-9
。这里有一个R中regex的链接,希望能有所帮助。