【发布时间】:2020-05-23 15:49:30
【问题描述】:
假设这是我的数据集
我想计算一个新变量(mutate),考虑到相同的模式(例如,lf_aparc_volume 和 rh_aparc_volune;然后是 lh_bankssts 和 rh_bankssts)。因此,新变量需要是一列的平均值,前面有 2 个空格,以此类推。 [在真实数据集中,我们在两列之间有 30 列我想取平均值]。
在excel中,选中两个变量后,会向右“拖拽”。因此,当结果“丢失”时,算法应该停止。
我想留在 tidyverse 环境中。 有什么建议吗?
编辑答案(感谢 Ian Campbell) 如果有人遇到同样的情况,请看下面的代码:
ds %>% #get the dataset
pivot_longer(-identificacao, names_to = "variable", values_to = "values") %>% #re-arrange the way we see the ds
separate(variable, into = c("group","variable"),
sep = "_", extra = "merge") %>% #fix names
pivot_wider(id_cols = c("identificacao","group"),
names_from = "variable", values_from = "values") %>% #wide format
group_by(identificacao) %>% #now I'll group the take the means
mutate(mean_aparc = mean(aparc_volume)) %>%
mutate(mean_bankssts = mean(bankssts_volume)) %>%
distinct(identificacao, .keep_all = TRUE) #keep only one identification per row
代码:
ds <-structure(list(identificacao = c("3004U", "77584X", "25917G",
"39895C", "20597Y", "64085M", "51573F", "42221E", "58658E", "8983C",
"18516K", "27050E"), lh_aparc_volume = c(2112, 2081, 2050, 2350,
2250, 1730, 1874, 1821, 2004, 1928, 1844, 2900), lh_bankssts_volume = c(1750,
1654, 1344, 1876, 1366, 1424, 1416, 1521, 1231, 2415, 938, 1356
), rh_aparc_volume = c(1797, 1895, 1386, 1875, 2123, 1457, 1754,
2478, 1670, 1613, 1702, 1873), rh_bankssts_volume = c(1951, 1991,
1774, 2539, 1830, 2564, 2433, 1092, 1803, 2009, 1609, 1787)), row.names = c(NA,
-12L), class = c("tbl_df", "tbl", "data.frame"))
ds
【问题讨论】: