我的问题与下面的post个非常相似

在我的数据库中,我有多个列包含像M0,M6,M12.等等.我有列的名字是M0,M6,M12.

我想替换包含M0的第一列...使用列中对应的值

作为一个理解性的例子,我有:

df <- data.frame(time=c("M0","M12","M0","M0","M12"),
                 M0=c(1,2,4,5,1),
                 M12=c(8,5,9,2,1))
df
  time M0 M12
1   M0  1   8
2  M12  2   5
3   M0  4   9
4   M0  5   2
5  M12  1   1

如前所述,我发现一篇文章有有趣的答案,其中一个特别是使用cur_data()

df2 <- df %>%
  rowwise %>%
  mutate(newd = cur_data()[[cur_data()$time]]) %>%
  ungroup 
df2
# A tibble: 5 × 4
  time     M0   M12  newd
  <chr> <dbl> <dbl> <dbl>
1 M0        1     8     1
2 M12       2     5     5
3 M0        4     9     4
4 M0        5     2     5
5 M12       1     1     1

它的工作,但需要很长的时间,也显然cur_data是反对赞成pick(),我不知道如何取代,使它的工作

对此有任何建议将不胜感激!

推荐答案

rowwisedplyr中是一个相当慢的操作,即使对于中等大小的数据帧.一种可能性是在time和行号上并行迭代,然后简单地 Select 值:

library(dplyr)
library(purrr)

df |>
  mutate(newd = map2_dbl(row_number(), time, \(idx, var) df[idx, var]))

R相关问答推荐

隐藏e_mark_line的工具提示

ggplot2中的X轴显示数值,单位为百,而不是十

如何在区分不同条件的同时可视化跨时间的连续变量?

如何从R ggplot图片中获取SVG字符串?

通过在colname中查找其相应值来创建列

方法::slotName如何处理非类、非字符的参数?

基于Key->Value数据帧的基因子集相关性提取

在数据帧列表上绘制GGPUP

随机森林的带Shap值的蜂群图

R -如何分配夜间GPS数据(即跨越午夜的数据)相同的开始日期?

我们如何在R中透视数据并在之后添加计算

如果条件匹配,则使用Mariate粘贴列名

数据集上的R循环和存储模型系数

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

如何将EC50值绘制在R中的剂量-react 曲线上?

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

每行不同列上的行求和

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

将Geojson保存为R中的shapefile

R中的交叉表